2016-07-12 40 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明确定义,那么你根本不需要这样做 - 它会自动从它的父窗口(Window)继承。

3

{绑定的RelativeSource = {自我的RelativeSource},路径=的DataContext}

然而,用户控件会自动继承窗口的datacontext!

1

如果您看到DataContext在代码隐藏时一次检查的代码为空,此时绑定尚未解析。你不是碰巧检查构造函数吗?

使用绑定你得到的DataContext应该是MyApp.Dialogs.Usercontrol类型。如果您希望它与Window具有相同的DataContext,只需完全删除绑定即可。

+0

正是!问题是我试图在用户控件的代码隐藏中将'DataContext'强制转换为变量!这就是问题所在!那么,在用户控件的代码隐藏之后,我应该投射并将数据上下文分配给该变量? – Vahid

+0

我会说它应该是所有加载'Load'事件触发器的时间。 @Vahid – Jai

+0

@Jai我的问题是这样的:我有两个单选按钮在我的用户控件中有一个'Checked'事件,它改变了'DataContext'。现在只要组件初始化,'Checked'事件就会触发并尝试更改空数据上下文!现在,我只是简单地从事件返回,当数据上下文为空以避免异常,但我知道必须有一个更加体面的方式来处理这个问题! – Vahid

相关问题