【发布时间】:2011-10-22 21:55:27
【问题描述】:
我注意到,当使用 EF CodeFirst 并通过推荐的 DBSet.Local 属性将我的 UI 绑定到 ObservableCollection<T> here 时,UI 将在实体添加到 DBContext 时更新,但在实体添加时不会更新修改。
似乎没有通知DBSet.Local 集合我的实体已更改。使用 EF Code-First 时,我是否需要为我的所有字段实现 INotifyPropertyChanged?我在 Code-First 的任何示例中都没有看到这一点,这似乎与目的背道而驰,但也许我错了。
如果您认为ObservableCollection 应该接收更改通知并且我的实体类或其他某些东西一定有问题,我可以发布一些示例代码。
编辑所以,为了确定,如果我的 ViewModel 中有如下代码
private ClientContext clientContext;
private Client client;
public Client Client
{
get { return client; }
set {
client = value;
NotifyOfPropertyChange(() => Client);
NotifyOfPropertyChange(() => Clients);
}
}
public ObservableCollection<Client> Clients { get { return clientContext.Clients.Local; }}
我们还假设我的视图有一个 Listbox,其中 Itemssource 设置为 Clients,SelectedItem 设置为 Client。我仍然需要在我的模型中实现 INotifyPropertyChanged,即使我在我的 ViewModel 中使用它?
【问题讨论】:
-
只有当
Client对象本身在您的 ViewModel 中发生更改(对象引用的更改)时,您才会收到更改通知,但不会在例如客户端的Name或City更改时收到更改通知.为此,您必须在 Client 模型类的每个属性上实现更改通知。
标签: entity-framework mvvm ef-code-first observablecollection