2015-12-07 3 views
0

У меня есть библиотека управления и приложение WPF. Мне нужно создать свой собственный элемент управления для визуализации графика. Так что я сделал GraphControl и установить там пользовательский атрибут GraphData:WPF-привязки в окне и пользовательском управлении

public static readonly DependencyProperty GraphDataProperty = DependencyProperty.Register("GraphData", typeof(Graph), typeof(GraphControl)); 

public Graph GraphData 
{ 
    get { return (Graph)GetValue(GraphDataProperty); } 
    set 
    { 
     SetValue(GraphDataProperty, value); 
     TextBlock.Text = "asdfasdfasdfasdfasd"; 
    } 
} 

Эта часть делается, но теперь я хочу, чтобы связать GraphData собственности в MainWindow применения, где GraphControl вложен. Я имею в виду, что я хочу изменить какое-либо свойство graphData в MainWindow, и когда я это сделаю, рендеринги графа, а весь рендеринг происходит внутри элемента управления, а не окна. Пример:

<controls:GraphControl x:Name="GraphControl" GraphData="{Binding GraphData}"/> 

Если я создаю новый DependencyProperty в окне, то все изменения обрабатываются в окне, а не контролировать.

ответ

1

Насколько я понимаю, вы хотите привязать свойство вашего элемента управления к свойству в окне, а не к DataContext. Если это так, то вы можете достичь его, используя атрибут объявления RelativeSource, как это:

<controls:GraphControl x:Name="GraphControl" GraphData="{Binding Path=GraphData, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"/> 
+0

+ нет оснований для создания DependencyProperty в классе MainWindow, вы должны просто реализовать INotifyPropertyChanged для привязки данных к вашему контролю. –

+0

@VadimMartynov Вы видите, даже с вашим кодом, когда я определяю новый DependencyProperty в Window, он становится новым экземпляром и не влияет на UserControl. Я имею в виду, например, что я изменяю текст внутри элемента управления с помощью кода в setter в Control code-behind, я поставил точку останова. Когда появляется моя форма, я добираюсь до этого bp, но не тогда, когда я устанавливаю свойство в Window –

+0

Чтобы добавить к ответу Льва, вам нужен Mode = TwoWay, чтобы заставить его работать. Но если вы собираетесь использовать одно и то же свойство дважды, то не создавайте его дважды, вместо этого используйте свойство attach. – adminSoftDK

Смежные вопросы