C# 网格没有得到更新
我的C#/WPF应用程序中有以下代码。单击Refresh按钮后,我在Viewmodel上调用GetData方法,并尝试重置可观察的集合。 但网格中的数据并没有得到更新。这里我做错了什么?CustomObservableCollection类中的重置方法逻辑正确吗 谢谢你的帮助 ViewModel.cs:C# 网格没有得到更新,c#,wpf,observablecollection,C#,Wpf,Observablecollection,我的C#/WPF应用程序中有以下代码。单击Refresh按钮后,我在Viewmodel上调用GetData方法,并尝试重置可观察的集合。 但网格中的数据并没有得到更新。这里我做错了什么?CustomObservableCollection类中的重置方法逻辑正确吗 谢谢你的帮助 ViewModel.cs: private object _myLock = new object(); internal void GetData() { var data = .
private object _myLock = new object();
internal void GetData()
{
var data = ...//Get data from database
lock (_myLock)
{
if (MyCollection != null )
{
MyCollection.Reset(data);
}
else
{
MyCollection = new CustomObservableCollection<Product>(data);
}
}
private object\u myLock=new object();
内部void GetData()
{
var data=…//从数据库获取数据
锁(_myLock)
{
if(MyCollection!=null)
{
MyCollection.Reset(数据);
}
其他的
{
MyCollection=新的CustomObservableCollection(数据);
}
}
XAML:
尝试将XAML代码更改为以下代码-
<... ItemsSource="{Binding Path=MyCollection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ... />
事实上,我认为重新初始化ObservableCollection比再次清除和重新添加项目要容易得多
public class CustomObservableCollection<T> : ObservableCollection<T>
{
private object _lock = new object();
public CustomObservableCollection()
: base()
{
}
protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
{
base.OnCollectionChanged(e);
}
public CustomObservableCollection(IEnumerable<T> collection)
: base(collection)
{
}
public void Reset(IEnumerable<T> range)
{
if (range == this)
{
return;
}
lock (_lock)
{
this.Items.Clear();
foreach (var item in range)
{
this.Items.Add(item);
}
this.OnPropertyChanged(new PropertyChangedEventArgs("Count"));
this.OnPropertyChanged(new PropertyChangedEventArgs("Item[]"));
this.OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, range, 0));
}
}
}
<... ItemsSource="{Binding Path=MyCollection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ... />