0

dataGridでListViewCollectionクラスを使用しています。基礎となるコレクションは、観察可能なコレクションです。

コレクション(ViewModelにある)でMoveメソッドを呼び出すたびに、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 に答える