0

次のような Windows ストア プロジェクトがあります。

class MyModel
{
    private int _testVar;
    public int TestVariable
    {
        get { return _testVar; }
        set
        {
            _testVar = value;
            NotifyPropertyChanged("TestVariable");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(string property)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(property));
    }


}

私のバインディングは次のとおりです。

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <TextBlock Text="{Binding Path=TestVariable}" />
    <Button Click="Button_Click_1"></Button>
</Grid>

そして背後にあるコード:

    MyModel thisModel = new MyModel();

    public MainPage()
    {
        this.InitializeComponent();

        thisModel.TestVariable = 0;
        DataContext = thisModel;
    }

この時点で、テキストブロックに 0 が表示されるため、バインディングが機能しているように見えます。ただし、ボタン クリック イベントを次のように処理すると、次のようになります。

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        thisModel.TestVariable++;
    }

数が増えている様子はありません。ここで何が欠けていますか?

4

2 に答える 2

2

あなたのクラスは実装していないようINotifyPropertyChangedです。つまり、私は見ることを期待していたclass MyModel : INotifyPropertyChanged

于 2012-11-13T08:33:42.747 に答える
1

まず、ビュー モデルは INotifyPropertyChanged を実装するか、 MVVM Lightのようなある種の MVVM ライブラリを使用する必要があります。これは非常に役立ちます。
次に、 thisModel.TestVariable++ の呼び出しが実際に値を更新するかどうかはわかりません。thisModel.TestVariable = thisModel.TestVariable + 1; を使用してみてください。

于 2012-11-13T08:45:56.930 に答える