我正在使用ListViewCollection类和我的dataGrid。底层集合是一个可观察的集合。
每当我在集合中调用Move方法(在ViewModel中)时,CurrentChanged事件都不会触发。
然而,当UI调用相同的方法(我可以在调用堆栈中看到它)时,事件会触发。
this.EmailTemplates = new ListCollectionView(templateVmList);
this.EmailTemplates.CurrentChanging += (o, e) => EmailTemplates_CurrentChanging(o, e);
this.EmailTemplates.CurrentChanged += (o, e) => { this.SelectedEmailTemplate = (EmailTemplateViewModel)this.EmailTemplates.CurrentItem; };
if (this.EmailTemplates.Count > 0)
{
if (!this.EmailTemplates.MoveCurrentToFirst())
throw new ArgumentException("Element not found in collection");
}
我应该在代码中做些什么来确保无论谁更改集合都会触发事件。
答案 0 :(得分:1)
尝试使用CollectionViewSource.GetDefaultView
而不是创建新的ListCollectionView
。
这个测试代码对我来说很好
public class LcViewModel : BaseItemsViewModel
{
public LcViewModel()
{
MoveCommand = new RelayCommand(Move);
var view = CollectionViewSource.GetDefaultView(Items);
view.CurrentChanged += (sender, args) => Debug.WriteLine("CurrentChanged");
view.CurrentChanging += (sender, args) => Debug.WriteLine("CurrentChanging");
}
public ICommand MoveCommand { get; private set; }
private void Move()
{
var view = CollectionViewSource.GetDefaultView(Items);
view.MoveCurrentToFirst();
}
}