我正在尝试使用MVVM模式处理数据网格。问题是当我第一次在datagrid中选择一个项目时,datagrid会正确更新source属性,然后我选择另一个项目,source属性不会更新。这是我在xaml中的绑定:
<DataGrid ItemsSource="{Binding Customers}"
SelectedItem="{Binding SelectedCustomer, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False">
ViewModel代码:
public Customer SelectedCustomer
{
get { return _selectedCustomer; }
set
{
if (value != _selectedCustomer)
{
_selectedCustomer = value;
NotifyOfPropertyChange(() => SelectedCustomer);
}
}
}
提前致谢!
答案 0 :(得分:2)
我已经解决了问题,因为客户的Equals方法存在拼写错误。
答案 1 :(得分:1)
看起来您的实施可能略有偏差。通常,在属性发生更改后,实现ModelView以实现更改的“INotifyPropertyChanged”。你绑定到一个可观察的集合,通常你有一个类似于你拥有的成员列表,但我通常这样做:
public string Email
{
get { return _customer.Email; }
set
{
if (value == _customer.Email)
return;
_customer.Email = value;
OnPropertyChanged("Email"); // Text should match property name
}
}
在此示例中,_customer将是POCO对象的私有成员,该对象具有自己的属性设置。您通常将父集合绑定为数据源,然后在其成员上实现属性。我从主要的MVVM MSDN示例中得到了这个以供参考:http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
我也不确定但是一旦我通常绑定数据Itemssource = {Binding(ModelView中的collectionName)}我只列出该集合的成员的文本。 EG:selectitem =“email”,这是该集合的一个属性。我通常也使用'observable collection'数据类型,因为这将实现更改。由于这个原因,我不确定是否在MVVM中使用了列表和其他集合。我知道'readonlycollection'和'observablecollection'是最常见的。