代码之家  ›  专栏  ›  技术社区  ›  Dominic Jonas

重新绘制ContentControl的数据模板

  •  0
  • Dominic Jonas  · 技术社区  · 7 年前

    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 回复  |  直到 7 年前
        1
  •  1
  •   Clemens    7 年前

    您可以删除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();
        }
    }