[英]Binding Datagrid to ObservableCollection<T> in SIlverlight
[英]I can't binding DataGrid to ObservableCollection
我不明白这里发生了什么。 我的ViewModel有两个公共属性:
public ObservableCollection<vw_ClientesFull> MyClients { get; set; }
private IEnumerable<vw_ClientesFull> _clients;
public IEnumerable<vw_ClientesFull> Clients
{
get
{
return _clients;
}
set
{
_clients= value;
OnPropertyChanged("Clients");
}
}
然后,我有一种刷新它们的方法:
private void RefreshClientes()
{
this.serviceClient.Clientes_ListarCompleted += (s, e) =>
{
Clients = e.Result;
MyClients = new ObservableCollection<vw_ClientesFull>(Clients);
};
this.serviceClient.Clientes_ListarAsync(_sRazonSocial, VendedorSel, TransporteSel, _nID, bInactivos);
}
我将它们绑定到dataGrid以显示信息。 如果我做:
ItemsSource="{Binding Path=Clients}"
如果工作完美,但如果我这样做:
ItemsSource="{Binding Path=MyClients}"
什么都没显示! 为什么? ObservableCollection不会自动触发onPropertyChange吗?
谢谢您的帮助!!!
更新
因此,如果我需要手动触发OnPropertyChange,为什么没有它就可以工作?
public ObservableCollection<Vendedores> Vendedores { get; set; }
private void CargarVendedores()
{
Vendedores = new ObservableCollection<Vendedores>(this.serviceClient.GetVendedores());
this.VendedorSel = this.Vendedores.FirstOrDefault();
}
如果我这样绑定一个组合框:
ItemsSource="{Binding Path=Vendedores}"
无需OnPropertyChange即可工作! 为什么!
此问题是由于误解造成的。 的ObservableCollection 不提高的PropertyChanged,当你更换(当整个财产被重新分配它发生的),而是CollectionChanged(在将项目添加或删除其升高)。 如果您打算重新分配整个对象,则仍然需要提高PropertyChanged。
设置MyClients
的值时必须引发PropertyChanged
事件,这与对Clients
所做的相同。
是的,ObservableCollection实现了INotifyPropretyChanged。 但是,它不会在这里帮助您:)
ObservableCollection很特别,因为它实现了INotifyCollectionChanged
。 换句话说,当将项目添加到基础集合或从基础集合中删除时,它引发一个事件。 它还实现了INotifyPropertyChanged,因此绑定到集合属性的所有内容都将得到更新。
不过,您正在更改变量本身(至少设置为一个新实例)。 这要求ObservableCollection 属性的“实例”引发事件。 换句话说,您需要:
private ObservableCollection<vw_ClientesFull> myClients;
public ObservableCollection<vw_ClientesFull> MyClients
{
get { return myClients; }
set
{
myClients = value;
OnPropertyChanged("MyClients");
}
在您的更新中,绑定尚未触发(您在构造函数中设置),因此它会获取正确的列表。 但是,列表的后续更改将不起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.