Изменить контекст данных свойства шаблона - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть свойство шаблона данных в элементе управления, который я хотел бы обернуть, чтобы немного изменить поведение.

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