1

たとえば、次のようなプロパティがあります。

private string foobar;

    public string Foobar
    {
        get
        {
            return this.foobar;
        }

        set
        {
            if (value != this.foobar)
            {
                // here I want to check if value is correct
                if(value != something)
                {
                   this.foobar = value;
                   this.NotifyPropertyChanged("Foobar");
                 }
                 else
                 {
                    value = null;
                    this.foobar = null;
                    this.NotifyPropertyChanged("Foobar");
                 }
            }
        }
    }

プロパティは Listview : にバインド (MVVM) されます SelectedItem="{Binding Foobar, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}

また、ユーザーがリストの値を変更すると、選択した項目が変更され、値がセッターに設定されます。ユーザーが間違った値を選択した場合、値と foobar null が割り当てられた場合、コードは問題ありません。しかし、WPFではまだ選択された値が表示されています。ゲッターにブレークポイントを設定すると、それも null を返すことがわかります。listview で選択した値をクリアするために WPF を更新する方法は? 最初のように空である必要があります。

ありがとう

4

2 に答える 2

1

コードの問題は、setterメソッドのバインディングによって割り当てられた値をオーバーライドしたいということです。プロパティを設定して呼び出したという単純な理由で、次のプロパティ変更時にコントロールが更新されないため、これは機能しません。値の検証を実装するには、この組み込みメカニズムを試してください。

于 2012-12-16T21:51:41.960 に答える
0

IDataErrorInfoを使用したいのですが、プロパティセッターロジックは使用しないでください。主な利点は、ビューモデルとビューのプロパティ値が常に同じであり、ビューモデルに値に問題がないかどうかの情報があることです。

于 2012-12-17T14:56:05.347 に答える