1

我正在尝试使用 MVVM 模式使用数据网格。问题是当我第一次在数据网格中选择一个项目时,数据网格将正确更新源属性,然后我选择另一个项目,源属性不更新。这是我在 xaml 中的绑定:

<DataGrid ItemsSource="{Binding Customers}" 
          SelectedItem="{Binding SelectedCustomer, Mode=TwoWay, 
              UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False">

视图模型代码:

public Customer SelectedCustomer
{
    get { return _selectedCustomer; }
    set
    {
        if (value != _selectedCustomer)
        {
            _selectedCustomer = value;
            NotifyOfPropertyChange(() => SelectedCustomer);
        }
    }
}

提前致谢!

4

2 回答 2

2

我已经解决了这个问题,原因是 Customer 的 Equals 方法存在拼写错误。

于 2013-04-13T05:23:11.430 回答
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 (collectionName in ModelView)} 我只是列出了该集合成员的文本。EG:selectitem = "email" 这是集合的一个属性。我通常也使用“可观察集合”数据类型,因为这将实现更改。由于这个原因,我不确定在 MVVM 中是否使用了列表和其他集合。我知道'readonlycollection'和'observablecollection'是最常见的。

于 2013-04-12T16:29:55.777 回答