如何做到 this.DataContext = this: in XAML...for eg<Window.DataContext> <local:MainWindow/></Window.DataContext>-->

How to do this.DataContext = this: in XAML....for eg<Window.DataContext> <local:MainWindow/></Window.DataContext>-->

虽然编译和运行代码后的结果是一样的,但我发现在.cs文件中定义XAML后面的数据上下文在设计模式上有点不同,比如以下

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new MainViewModel();
        }   
    }

并在 xaml 中做这样的事情。

 <Window.DataContext>
        <local:MainViewModel/>
  </Window.DataContext>

不同之处在于在编码时显示 window 中的设计模式。当代码在 Xaml 中时,视图很好,它显示了例如元素。对于 DataGrid,它显示具有值的行数和列数(如果已定义)。

所以,我想将 .cs 文件中的以下代码更改为

public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;          
        }

相当于 XAML。我尝试使用以下代码

    <Window.DataContext>
        <local:MainWindow/>
    </Window.DataContext>

但它在初始化时抛出异常。有人可以帮我吗?我对 WPF 数据绑定数据上下文内容还是陌生的。

谢谢

这会将 DataContext 设置为 MainWindow 的新实例(这又会将 DataContext 设置为新实例,依此类推):

<Window.DataContext>
    <local:MainWindow/>
</Window.DataContext>

this.DataContext = this 等价于:<Window ... DataContext="{Binding RelativeSource={RelativeSource Self}}">.

您还可以设置 design time DataContext:

d:DataContext="{d:DesignInstance Type=local:MainWindow, IsDesignTimeCreatable=True}