我開始爲我的一個Silverlight應用程序實現MVVM。 (我沒有使用任何工具包)。MVVM viewmodel屬性觸發更新
我的頁面包含有兩個組合框的部分。選擇其中一個組合中的某個項目會觸發一個搜索,用於更新組合框下可見的網格。
每個組合的選定項目都綁定到我的視圖模型中的一個屬性。這些屬性的setter會引發INotifyPropertyChanged屬性更改並自動更新綁定到網格的數據。
一切都很好,直到我需要添加一個重置按鈕,其目的是重置搜索參數即:每個組合框不應該指示任何項目和網格應該是空的。
- 如果viewmodel中的重置函數更新後備字段,則UI將不會反映更改,因爲不會調用RaisePropertyChanged。
- 如果視圖模型復位功能更新的屬性,用戶界面將反映這些更改,但網格將被更新兩次:正在重置第一屬性時爲null,也爲第二
任何幫助表示讚賞
/// <summary>Selected user.</summary>
public User SelectedUser
{
get { return _selectedUser; }
set
{
_selectedUser = value;
RaisePropertyChanged("SelectedUser");
UpdateProducts();
}
}
/// <summary>Selected product category.</summary>
public ProductCategory SelectedProductCategory
{
get { return _selectedProductCategory; }
set
{
_selectedProductCategory = value;
RaisePropertyChanged("SelectedProductCategory");
UpdateProducts();
}
}
// Reset option 1
public void Reset()
{
_selectedUser = null;
_selectedProductCategory = null;
_products = null;
}
// Reset option 2
public void Reset()
{
SelectedUser = null;
SelectedProductCategory = null;
// No need to update Products which has already been updated twice...
}
感謝您的回答,我同意你的意見。它不僅在理論上是錯誤的,如果我碰巧改變屬性名稱,重構將無法更新關聯的RaisePropertyChanged,如果它們位於一個地方(屬性設置器),但對我來說似乎沒有問題危險的是他們在其他地方可用 – 2010-09-22 09:21:11
不要讓我開始使用字符串的屬性更改通知...哦,如此脆弱和低效。你會認爲微軟定義核心API的人會更聰明一些。 – 2010-09-22 09:26:05