0

MVVM パターンを試していますが、問題が発生しました。

モデルをインスタンス化する方法は次のとおりです。

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

しかし、これを使用しようとすると、this.textGameClientModelが NULL であるため、 NullReferenceExceptionが発生します。

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

Page のOnNavigateToハンドラーと OnLoaded ハンドラーでも同じ行を試しましたが、結果は同じでした。

イベント ハンドラを接続する適切な場所はどこですか?

(MVVMプロジェクトのコードビハインドで質問から気をそらさないようにしてください。RichTextBoxを使用しているため、行の外側に少し色を付ける必要がありました。)

4

1 に答える 1

1

私は実際にかなり最近、 WPF 作成手順に関する回答を書きましたが、この場合の問題ではありません。

この場合、DataContextXAML で を設定していますが、textGameClientModelプロパティの設定とは異なります。

DataContextプロパティを最初のプロパティに設定するには、このようなことをする必要があります

this.textGameClientModel = this.DataContext as GameClientModel;

または単にDataContextクラスとしてキャストしてイベントをセットアップします

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

DataContext補足として、あなたが持っているようなものにハードコーディングすることは決してお勧めしUserControlません。そうすることで、他のDataContextものが に渡されるのを防ぎますUserControl。これは、UI レイヤーとデータ レイヤーが分離されているという WPF/MVVM の最大の利点の 1 つを無効にします。

于 2012-12-17T17:42:09.603 に答える