更改模板属性的数据上下文

时间:2018-11-19 06:47:16

标签: c# wpf datatemplate dependency-properties

我在控件上有一个数据模板属性,我想包装一下以改变行为。

该模板属性应公开给控件的用户(开发人员),但我想更改数据上下文,因为我想传递给用户的数据上下文位于可视树中的某个位置,我不希望用户每次都在那里导航。因此,最后,BaseControl

的用户(开发人员)的绑定路径只是简单一点了

控件包装中的XAML

<BaseControl SomeTemplate="{Binding MyTemplate}" />

控制包装中的代码后面

public static readonly DependencyProperty MyTemplateProperty = DependencyProperty.Register(
      "MyTemplate", typeof(DataTemplate), typeof(BaseControl), new PropertyMetadata(default(DataTemplate)));

public DataTemplate MyTemplate { get { return (DataTemplate)GetValue(MyTemplateProperty ); } set { SetValue(MyTemplateProperty , value); } }

控件包装的使用

<BaseControl>
  <BaseControl.MyTemplateProperty>
    <!-- desired -->
    <Label Content="{Binding Name}" />
    <!-- actual -->
    <!-- the data context of "OtherProperty" should be exposed to the user -->
    <Label Content="{Binding DataContext.SomeProperty.OtherProperty.Name, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=SomeType}}" />
  </BaseControl.MyTemplateProperty>
</BaseControl>

0 个答案:

没有答案