Перерисовать шаблон данных ContentControl

У меня есть следующее ContentControl:

<ContentControl 
    Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=SelectedEntry}">
    <ContentControl.ContentTemplate>
        <DataTemplate DataType="controls:HCITextListEntry">
            <controls:MyCustomControl
                Text="{Binding Text}" 
                Parameter="{Binding Parameters}"/>
        </DataTemplate>
    </ContentControl.ContentTemplate>
</ContentControl>

Каждый раз SelectedEntry изменения свойств, я хочу перерисовать / переустановить MyCustomControl, На самом деле только свойства обновляются.

1 ответ

Решение

Вы можете удалить ContentTemplate и написать конвертер для привязки содержимого, который возвращает экземпляр MyCustomControl:

<ContentControl Content="{Binding SelectedEntry,
                          RelativeSource={RelativeSource TemplatedParent},
                          Converter={StaticResource MyCustomControlConverter}}"/>

Конвертер:

public class MyCustomControlConverter : IValueConverter
{
    public object Convert(
        object value, Type targetType, object parameter, CultureInfo culture)
    {
        var control = new MyCustomControl();

        control.SetBinding(MyCustomControl.TextProperty,
            new Binding("Text") { Source = value });
        control.SetBinding(MyCustomControl.ParameterProperty,
            new Binding("Parameters") { Source = value });

        return control;
    }

    public object ConvertBack(
        object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}
Другие вопросы по тегам