【问题标题】:How to do this.DataContext = this: in XAML....for eg<Window.DataContext> <local:MainWindow/></Window.DataContext>-->如何做到这一点。DataContext = this: 在 XAML 中....例如 <Window.DataContext> <local:MainWindow/></Window.DataContext>-->
【发布时间】:2019-04-21 21:32:40
【问题描述】:

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

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

并在这样的 xaml 中进行操作。

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

不同之处在于在设计模式期间在显示窗口中进行编码。当代码在 Xaml 中时,视图很好,它显示了例如元素。对于DataGrid,它显示行数和列数,如果它定义了它的值。

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

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

它在 XAML 中的等价物。我尝试使用以下代码

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

但它在初始化时抛出异常。有人可以帮我吗。我还是 WPF 数据绑定数据上下文的新手。

谢谢

【问题讨论】:

    标签: wpf xaml binding datacontext


    【解决方案1】:

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

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

    this.DataContext = this 的等效项是:&lt;Window ... DataContext="{Binding RelativeSource={RelativeSource Self}}"&gt;

    您也可以设置design time DataContext

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

    【讨论】:

      猜你喜欢
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      相关资源
      最近更新 更多