如何做到 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}
虽然编译和运行代码后的结果是一样的,但我发现在.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}