У меня есть свойство шаблона данных в элементе управления, который я хотел бы обернуть, чтобы немного изменить поведение.
Это свойство шаблона должно быть предоставлено пользователю (разработчику) моего элемента управления, но я хочуизмените контекст данных, потому что контекст данных, который я хотел бы передать пользователю, находится где-то в пределах визуального дерева, и я не хочу, чтобы пользователь перемещался туда каждый раз.Таким образом, в конечном итоге путь привязки просто упрощен для пользователя (разработчика) XAML BaseControl
в управляющей оболочке
<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>