将Window的DataContext绑定到WPF中的窗口本身

时间:2015-03-09 12:18:48

标签: wpf xaml

我有一个简单的对话窗口,它继承自Window,我在XAML中设置它的DataContext,如下所示:

<Window x:Class="MyProject.MyDialog"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        DataContext="{Binding RelativeSource={RelativeSource Self}}"
        ...>
    <StackPanel>
        <TextBox Text="{Binding SomeText}"/>
        ...
    </StackPanel>
</Window>

以下是我展示此对话框的方式:

var dialog = new MyWindow();
MyWindow.SomeText = "some text";

if (dialog.ShowDialog() == true)
    ...

由于某些原因,在创建窗口时没有将文本框的初始文本设置为“某些文本”,并且没有绑定错误。

但是,如果我为StackPanel而不是Window设置数据上下文:

<StackPanel DataContext="{Binding RelativeSource={RelativeSource AncestorType=Window}}">
    ...
</StackPanel>

一切都按预期工作。

这两者有什么区别?为什么第一种方法不起作用?

1 个答案:

答案 0 :(得分:0)

您需要在窗口中实现INotifyPropertyChanged以使第一个案例正常工作。

窗口本身未被通知其属性(self)被更改,因此未设置dc。