2016-07-12 4 views
0

Я пытаюсь привязать контекст данных пользовательского элемента управления к контексту данных окна. Но каким-то образом в коде пользовательского элемента управления контекст данных равен нулю. Что я здесь делаю неправильно?Привязать контекст данных управления пользователя к главному окну в WPF

<Window x:Class="MyApp.Dialogs.SettingsWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:dialogs="clr-namespace:MyApp.Dialogs" 
     Title="Settings"> 

    <dialogs:Usercontrol DataContext="{Binding RelativeSource={RelativeSource Self}}"></dialogs:Usercontrol> 

</Window> 

ответ

2

Если MyApp.Dialogs.Usercontrol определил свой собственный DataContext в его XAML/код-позади, и вы пытаетесь изменить это, то вы можете сделать это:

<dialogs:Usercontrol DataContext="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext}" /> 

Если MyApp.Dialogs.Usercontrol не имеет его DataContext четко определены, то вам вообще не нужно это делать - он автоматически наследуется от родителя (окна).

3

{Binding RelativeSource = {RelativeSource Атман}, Path = DataContext}

Однако UserControl автоматически наследует DataContext окна!

1

Если вы видите, что DataContext является нулевым в коде, когда вы проверяете время, когда привязка еще не разрешена. Вы не можете проверить конструктор, не так ли?

С привязкой вы получили DataContext должен быть типа MyApp.Dialogs.Usercontrol. Если вы хотите, чтобы у него был тот же DataContext, что и Окно, просто удалите привязку вообще.

+0

Ровно! Проблема в том, что я пытаюсь использовать DataContext для переменной в коде управления пользователя! И вот в чем проблема! Итак, тогда, где в коде управления пользовательского контроля я должен использовать и назначать контекст данных этой переменной? – Vahid

+0

Я бы сказал, что он должен быть загружен с помощью триггеров событий «Загрузить». @Vahid – Jai

+0

@Jai У меня есть проблема: у меня есть два переключателя в моем пользовательском элементе управления, у которых есть событие «Проверено», которое меняет «DataContext». Теперь, как только компонент инициализируется, событие 'Checked' запускается и пытается изменить нулевой контекст данных! На данный момент я просто возвращаюсь из события, когда контекст данных имеет значение null, чтобы избежать исключений, но я знаю, что должен быть более достойный способ справиться с этим! – Vahid

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