C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 別プロパティのPropertyChangedの発火はOK?


(過去ログ 124 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■74169 / inTopicNo.1)  別プロパティのPropertyChangedの発火はOK?
  
□投稿者/ nobb (68回)-(2014/12/04(Thu) 17:59:26)

分類:[C#] 

まずタイトルの文字数制限でうまく表現できなかったので、そこだけ訂正します。
「プロパティのセッター内で別プロパティのPropertyChangedイベントを発火してもいいですか?」

開発環境:VS2013 Update4
言語:C#, WPF
.NET Framework 4.5

class HogeCollection : INotyfiPropertyChanged
{
  private List<Hoge> hogeList = new List<Hoge>();
  private int index;
  public int Index
  {
    get{return index;}
    set
    {
      index = value;
      RaisePropertyChanged("Index");
      RaisePropertyChanged("Hoge);
    }
  }
  
  public HogeDetail Hoge
  {
    get {return hogeList[Index]; }
  }
  
  #region INotifyPropertyChanged メンバー
  public event PropertyChangedEventHandler PropertyChanged;
  protected void RaisePropertyChanged(string propertyName)
  {
    var h = PropertyChanged;
    if (h != null)
      h(this, new PropertyChangedEventArgs(propertyName));
  }
  #endregion
}

上記の様なHogeCollectionクラスで、Indexプロパティの値が変更された場合に、Indexプロパティのセッター内でRaisePropertyChanged("Hoge")を発火してもいいのでしょうか?

HogeプロパティはWindow側にバインドされ、さらにその中身も細かくバインドするソフトを作っています。
戻る/進むボタンでhogeListに登録されているインスタンスを切り替えて表示させたいので、上記の様な実装を行い試したところうまく動いているようです。
しかし、IndexプロパティでRaisePropertyChanged("Hoge")をしている現状は「良い」状態なのでしょうか?
たとえば、メソッドの責務は1つであるべき!というような原則(?)から大きく外れているように思い、なんだか気持ち悪い状態です。
数人で使う社内ツールですので、このままでもいいのですが、後学のために教えてください。

#ソースに関しては全部のコピペが出来なかった(隠す部分が多かった)ので、テキストエディタで書いています。
#間違いがありましたご容赦下さい。

引用返信 編集キー/
■74171 / inTopicNo.2)  Re[1]: 別プロパティのPropertyChangedの発火はOK?
□投稿者/ 魔界の仮面弁士 (183回)-(2014/12/04(Thu) 18:30:02)
No74169 (nobb さん) に返信
> 「プロパティのセッター内で別プロパティのPropertyChangedイベントを発火してもいいですか?」

明確な解を持っているわけでありませんが、こういう場合には
「Index と Hoge がどのような関係にあるかどうか」次第ではないでしょうか。

たとえば System.Windows.Forms.CheckBox の実装をみた場合、
CheckState を変更したときに CheckStateChanged と CheckedChanged が発火することもあれば、
CheckState を変更したときに CheckStateChanged だけ発火する場合もありますよね。

この場合、CheckedChanged が連動発生するかどうかは、
 「CheckState の変更によって、Checked まで変更を受けたかどうか」
で決まります。System.Windows.Controls.CheckBox の実装パターンとは異なりますけれどね。


> なんだか気持ち悪い状態です。
同じ値を代入したときにまで変更通知を挙げるべきか否か…と言う争点もあるかも。
引用返信 編集キー/
■74172 / inTopicNo.3)  Re[2]: 別プロパティのPropertyChangedの発火はOK?
□投稿者/ nobb (69回)-(2014/12/05(Fri) 09:20:43)
No74171 (魔界の仮面弁士 さん) に返信
ご回答ありがとうございます。

>  「CheckState の変更によって、Checked まで変更を受けたかどうか」で決まります。
「Indexの値によりHogeプロパティの値が変更される」という実装にしたいので、「変更を受けた」と考え
今回についてはIndexプロパティ内でHogeも発火させようと思います。


> 同じ値を代入したときにまで変更通知を挙げるべきか否か…と言う争点もあるかも。
同じ値を代入というと、index == valueの状態ってことですかね?
そうであれば、必要ない(同じ値の代入まで考えが及んでいなかった)ので、ifによる判定も付け加えたいと思います。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -