我开始为我的一个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