私が(考えて)理解していることは、ModelView内にINotifyPropertyChangedを実装すると、プロパティが変更された場合にPropertyChangedイベントを発生させることができるということです。
そうすれば、基になるプロパティが変更されたことがビューに通知されるため、UI は新しい変更を取得する必要があります。
私は理論を正しく理解しましたか?
私が直面している問題は、ViewModel にバインドされた Infragistics DataGrid があることです。日付値を変更するとすぐに、ViewModel のプロパティが正しく設定され、イベントが発生する様子を確認できます。しかし、私はこのイベントを外部からサブスクライブしていませんが、UI はどのように通知を受けますか?
UIはまったく知られていないと思うので、私はこれを求めています。ViewModel を同じ基になる Model プロパティにバインドする 2 番目のテキスト ボックスを配置しました。ただし、DataGrid でそのプロパティを変更すると、TextBox (Mode=OneWay) は自動的に更新されません。
私は実際にMVVM-Light Frameの作業を利用し、INotifyPropertyChangedの代わりにViewModelBaseを使用し、RaisePropertyChanged(...)を実行します。しかし、結果は似ているはずです。
TextBox をその Event に手動でサブスクライブする必要がありますか?
編集: 問題は解決しましたが、なぜこれが起こっているのか正確にはわかりません。質問に答える前に、アーキテクチャについてもう少し説明する必要があります。Datgrid は、ViewModelB を返す ViewModelA の propertyA にバインドされ、ObservableCollection<ViewModelB>.
実際には Grid が表示するすべてのプロパティが含まれています。これらのプロパティはすべて OnProperyChanged の Setter で自然に発生します。
TextBox は、ViewModelA 内にも存在する PropertyB にバインドされました。ただし、直接文字列を返すため、PerpertyB の基になるゲッターは次のように返します。
_cashflowInputs[0].ProjectedDate.ToString();
ただし、TextBox をこの propertyB にバインドせずに、PropertyA にもバインドすると、次のように機能します。
それは奇妙だ。私はそれが同じように機能することを期待していました。両方のプロパティが同じ ViewModel に存在し、同じ にアクセスしますprivate ObservableCollection<ViewModelB>
。なぜそれが問題になるのでしょうか?
public ObservableCollection<ViewModelB> PropertyA
{
get { return _cashflowInputs;}
}
public string PropertyB
{
get { return _cashflowInputs[0].ProjectedDate.ToString(); }
}
ケーブ