Win8应用疑难解答:何时初始化我的XAML定义的页面字段?

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:

我正在尝试MVVM模式,但遇到了一个问题

下面是我如何实例化我的模型:

<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;