将用户控件的数据上下文绑定到WPF中的主窗口

将用户控件的数据上下文绑定到WPF中的主窗口,wpf,xaml,data-binding,user-controls,datacontext,Wpf,Xaml,Data Binding,User Controls,Datacontext,我试图将用户控件的数据上下文绑定到窗口的数据上下文。但不知何故,在用户控件的代码背后,数据上下文是空的。我做错了什么 <Window x:Class="MyApp.Dialogs.SettingsWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

我试图将用户控件的数据上下文绑定到窗口的数据上下文。但不知何故,在用户控件的代码背后,数据上下文是空的。我做错了什么

<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>

{Binding RelativeSource={RelativeSource Self},Path=DataContext}

但是,usercontrol应该自动继承窗口的datacontext

如果您在代码中看到DataContext为null,那么您将在绑定尚未解析时进行检查。你没有碰巧在构造函数中签入,是吗

通过绑定,您得到的DataContext应为MyApp.Dialogs.Usercontrol类型。如果希望它与窗口具有相同的DataContext,只需完全删除绑定。

如果MyApp.Dialogs.Usercontrol在其XAML/代码中定义了自己的DataContext,并且您正试图覆盖它,则可以执行以下操作:

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

如果MyApp.Dialogs.Usercontrol没有明确定义其DataContext,则根本不需要执行此操作-它将自动从其父窗口继承。

完全正确!问题是我试图将DataContext强制转换为用户控件代码背后的变量!这就是问题所在!那么,在用户控件的代码隐藏中,我应该在哪里强制转换数据上下文并将其分配给该变量呢?我会说它应该全部由时间加载事件触发器加载@Vahid@Jai我的问题是:在我的用户控件中有两个单选按钮,它们有一个更改DataContext的选中事件。现在,只要组件初始化,Checked事件就会激发并尝试更改空数据上下文!现在,我只是在数据上下文为null时从事件返回以避免异常,但我知道必须有一种更合适的方法来处理这个问题@Vahid更改空数据上下文意味着什么?如果您有一个新的DataContext,那么原始值是否为null并不重要,是吗?@Vahid如果您只发布单选按钮的部分代码以及事件本身,它将真正帮助人们了解如何帮助您。