0

我在 dataGrid 中使用 ListViewCollection 类。底层集合是一个可观察的集合。

每当我调用集合中的 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");             
  }

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

4

1 回答 1

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();
    }
}
于 2012-05-15T16:53:14.457 回答