1

いくつかの(初心者の)質問:

1)たくさん見かける

public Person SelectedPerson { get; set; } 

これはプロパティの変更を発生させないと思いますか?

それで、私がそうしたいのであれば、私は以下を提供しなければなりませんか?

    private Person selectedPerson;
    public Person SelectedPerson
    {
        get
        {
            return this.selectedPerson;
        }
        set
        {
            if ((this.selectedPerson != value))
            {
                this.selectedPerson = value;
                base.OnPropertyChanged("SelectedPerson");
                // Note: Using ViewModelBase

            }
        }
    }

2)私が以下を持っている場合:

    public bool CanDeletePerson
    {
        get
        {
            return SelectedPerson != null;
        }
    }

また、XAMLでも

< Button IsEnabled="{Binding CanDeletePerson}" 
Command="{Binding DeletePersonCommand}"> Delete </ Button >

CanDeletePersonプロパティを再評価するにはどうすればよいですか? 基本的には最初は無効になっていますが、グリッドをクリックして行を移動すると、SelectedPersonは更新されますが、CanDeletePersonは更新された値を取得しません。実際に値を再度確認するにはどうすればよいですか?

3)なるほど

...何かがイベントに登録したかどうかによって異なります

どのようにイベントを購読しますか?

4

4 に答える 4

3
  1. 正解-発火しない
  2. はい、再評価するには、次のようにCanDeletePersonPropertyChangedを発生させることができます。CanDeletePerson

        set
        { 
            if ((this.selectedPerson != value))
            { 
                this.selectedPerson = value; 
                base.OnPropertyChanged("SelectedPerson"); 
                base.OnPropertyChanged("CanDeletePerson");
            }
        }
    
  3. 通常のイベントと同様ですが、WPFを使用している場合は、通常、明示的にサブスクライブする必要はありません。

于 2009-08-11T02:57:17.277 に答える
2

はい、自動プロパティはPropertyChangedイベントを発生させません。

セッターに追加することで、CanDeletePersonを再評価することができます。OnPropertyChanged("CanDeletePerson")SelectedPerson

最後のビットが質問かどうかはわかりませんが、他のイベントと同じようにPropertyChangedイベントをサブスクライブできます。MyClass.PropertyChanged += MyClassPropertyChanged

MyClassPropertyChangedはどこにありますか

private void MyClassPropertyChanged(object sender, PropertyChangedEventArgs args)
{
    args.PropertyName .... //<-- Name of property changed.
}

しかし、そうする必要はありません。WPFは、必要なイベントのサブスクライブを行います。

于 2009-08-11T02:55:12.163 に答える
1

これは、MVVMパターンを紹介する優れた記事へのリンクです

具体的には、RelayCommandクラスを見ると、ICommandオブジェクトを実装し、コマンドを実行できるかどうかを評価するための述語を指定できるという優れた機能を果たしています。

RelayCommandでcanExecute述語を評価することで、別のプロパティをButtonのIsEnabledプロパティにバインドする必要がなくなります。

私は通常、canExecute述語にブール値を提供するプライベートプロパティを実装する記事の例に従います。

その記事は私がパターンを始めるのに良い助けになりました。

于 2009-08-11T03:36:34.507 に答える
0

PropertyChangedイベントを使用する場合、クラスはINotifyProperyChangedインターフェイスを実装し、必要に応じてイベントを発生させる必要があります。WPFでは、データバインディングのデフォルトはDependencyPropertyであるため、PropertyChangedイベントを操作する場合は、XAMLに対して何かを行う必要があります(クラスの人がPropertyChangedイベントを発生させるNameプロパティを持っていると仮定します)。

<TextBlock Text={Binding Path=Name, UpdateSourceTrigger=PropertyChanged} />
于 2009-08-11T10:43:41.220 に答える