Win8应用疑难解答:何时初始化我的XAML定义的页面字段?
我正在尝试MVVM模式,但遇到了一个问题 下面是我如何实例化我的模型:Win8应用疑难解答:何时初始化我的XAML定义的页面字段?,xaml,mvvm,windows-8,Xaml,Mvvm,Windows 8,我正在尝试MVVM模式,但遇到了一个问题 下面是我如何实例化我的模型: <common:LayoutAwarePage ... ...(omitted boiler plate generated lines here) ... ... mc:Ignorable="d"> <common:LayoutAwarePage.DataContext> <local:TextGameClientModel x:
<common:LayoutAwarePage
...
...(omitted boiler plate generated lines here)
...
...
mc:Ignorable="d">
<common:LayoutAwarePage.DataContext>
<local:TextGameClientModel x:Name="textGameClientModel"/>
</common:LayoutAwarePage.DataContext>
我也在页面的OnNavigateTo处理程序和OnLoaded处理程序中尝试了相同的行,但结果相同
连接我的事件处理程序的正确位置在哪里?
(请不要让我在MVVM项目中的代码分散你的注意力。我对RichTextBox的使用迫使我在行外涂了一点颜色。)事实上,我最近写了一个关于这个问题的答案,但这不是问题所在 在本例中,您正在XAML中设置
DataContext
,但是这与设置textGameClientModel
属性不同
您需要执行类似的操作,首先将属性设置为您的DataContext
this.textGameClientModel = this.DataContext as GameClientModel;
或者简单地将DataContext
转换为类来设置事件
((GameClientModel)this.DataContext).runsPublished += textGameClientModel_runsPublished;
作为旁注,我从不建议将
DataContext
硬编码为UserControl
。通过这样做,您可以防止任何其他DataContext
传递到UserControl
,这有点挫败了WPF/MVVM的最大优势之一,即具有独立的UI和数据层。我不完全理解,但它确实有效。非常感谢!:)@但是,DataContext
是UI层后面的数据层,在进行绑定时,UI层通常会引用该数据层。实际上,我的博客上有一篇文章,用简单的术语解释了DataContext
到底是什么。如果您是WPF新手,您可能会发现这很有用:)
((GameClientModel)this.DataContext).runsPublished += textGameClientModel_runsPublished;