ListView集合Move *方法不会触发Changed事件

时间:2012-05-15 16:13:08

标签: c# wpf

我正在使用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");             
  }

我应该在代码中做些什么来确保无论谁更改集合都会触发事件。

1 个答案:

答案 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();
    }
}