0

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

这是我实例化模型的方式:

<common:LayoutAwarePage
    ...
    ...(omitted boiler plate generated lines here)
    ...
    ...
    mc:Ignorable="d">
    <common:LayoutAwarePage.DataContext>
        <local:TextGameClientModel x:Name="textGameClientModel"/>
    </common:LayoutAwarePage.DataContext>

但是当我尝试使用它时,我得到了NullReferenceException,因为this.textGameClientModel为 NULL:

public MainPage()
{
    this.InitializeComponent();
    this.textGameClientModel.runsPublished += textGameClientModel_runsPublished;
}

我还在 Page 的OnNavigateTo处理程序和OnLoaded处理程序中尝试了同一行,但结果相同。

连接我的事件处理程序的正确位置在哪里?

(请不要让我在 MVVM 项目中的代码隐藏分散您的注意力。我对 RichTextBox 的使用迫使我在线条之外稍微着色。)

4

1 回答 1

1

实际上,我最近写了一个关于WPF 创建步骤的答案,但是在这种情况下这不是问题。

在这种情况下,您DataContext在 XAML 中设置 ,但这与设置textGameClientModel属性不同

你需要做这样的事情来设置属性等于你的DataContext第一个

this.textGameClientModel = this.DataContext as GameClientModel;

或者只是将您DataContext作为您的班级来设置活动

((GameClientModel)this.DataContext).runsPublished += textGameClientModel_runsPublished;

作为旁注,我从不建议将其硬编码DataContextUserControl您所拥有的。通过这样做,您可以防止任何其他东西DataContext被传递给UserControl,这违背了 WPF/MVVM 的最大优势之一,即具有单独的 UI 和数据层。

于 2012-12-17T17:42:09.603 回答