從我認爲理解的是,在ModelView中實現INotifyPropertyChanged,允許在屬性被修改的情況下引發PropertyChanged事件。關於INotifyPropertyChanged和更新綁定的困惑
通過這種方式,視圖應該被通知基礎屬性已更改,因此UI應該獲取新的更改。
我理解正確嗎?
我面對的問題是我有一個Infragistics DataGrid綁定到ViewModel。只要我更改日期值,就可以看到ViewModel上的屬性如何正確設置並引發事件。但是我還沒有從外面訂閱這個事件,UI如何得到通知?
我在問這個,因爲我覺得用戶界面根本就不是。我已經放置第二個文本框,將您的ViewModel綁定到相同的基礎Model屬性。但是,如果我用DataGrid修改該屬性,TextBox(Mode = OneWay)不會自動更新。
我實際上使用MVVM-Light Frame工作,並使用ViewModelBase代替INotifyPropertyChanged並執行RaisePropertyChanged(...)。但結果應該是相似的。
我是否必須手動訂閱文本框到某個事件?
編輯:我已經解決了這個問題,但不明白爲什麼會發生這種情況。在回答問題之前,我需要更詳細地解釋一下這個架構。 Datogrid綁定到ViewModelA中的propertyA,返回ObservableCollection<ViewModelB>.
ViewModelB實際上包含網格應顯示的所有屬性。所有這些屬性在Setters中自然會觸發OnProperyChanged。
TextBox綁定到PropertyB,它也存在於ViewModelA中。但它直接返回一個字符串,所以PerpertyB的基本的getter返回這樣的:如果我不綁定文本框這個propertyB,但其綁定到PropertyA以及然而
_cashflowInputs[0].ProjectedDate.ToString();
,它的工作原理:
它的奇怪。我期待它以同樣的方式工作。兩個屬性都生活在同一個ViewModel上並訪問相同的private ObservableCollection<ViewModelB>
,它爲什麼要重要?
public ObservableCollection<ViewModelB> PropertyA
{
get { return _cashflowInputs;}
}
public string PropertyB
{
get { return _cashflowInputs[0].ProjectedDate.ToString(); }
}
卡瓦
只是爲了澄清,在你的代碼示例PropertyA是一個ObservableCollection和PropertyB是一個字符串?你說你將PropertyA(ObservableCollection)綁定到TextBox? – ChrisNel52 2010-07-07 15:24:32
DataGrid綁定到PropertyA,TextBox綁定到PropertyB – Houman 2010-07-07 16:32:59