WPF Datagrid selectedItem不更新源

时间:2013-04-12 16:04:25

标签: wpf binding datagrid

我正在尝试使用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);
        }
    }
}

提前致谢!

2 个答案:

答案 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'是最常见的。