首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何执行this.DataContext =此:在XAML....for eg<Window.DataContext> <eg<Window.DataContext>:MainWindow/></Window.DataContext>-->

如何执行this.DataContext =此:在XAML....for eg<Window.DataContext> <eg<Window.DataContext>:MainWindow/></Window.DataContext>-->
EN

Stack Overflow用户
提问于 2018-11-19 13:50:32
回答 1查看 778关注 0票数 2

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

代码语言:javascript
复制
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new MainViewModel();
        }   
    }

在这样的xaml里做。

代码语言:javascript
复制
 <Window.DataContext>
        <local:MainViewModel/>
  </Window.DataContext>

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

因此,我想在.cs文件中将下面的代码更改为

代码语言:javascript
复制
public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;          
        }

在XAML中与之相当。我尝试使用下面的代码

代码语言:javascript
复制
    <Window.DataContext>
        <local:MainWindow/>
    </Window.DataContext>

但是它在初始化时抛出异常。有人能帮我一下吗。对于WPF数据库、数据上下文之类的内容,我仍然是新手。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-19 13:55:46

这会将DataContext设置为MainWindow的一个新实例(然后将DataContext设置为新实例,以此类推):

代码语言:javascript
复制
<Window.DataContext>
    <local:MainWindow/>
</Window.DataContext>

相当于this.DataContext = this的是:<Window ... DataContext="{Binding RelativeSource={RelativeSource Self}}">

您还可以设置design time DataContext

代码语言:javascript
复制
d:DataContext="{d:DesignInstance Type=local:MainWindow, IsDesignTimeCreatable=True}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53376069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档