-1

動的アイテムソースを持つ wpf Treeview があります。ユーザーは実行時に項目を追加および削除できます。ツリービューのitemsSourceに追加された現在追加されているUIElementを提供するイベントがありません。したがって、OnCollectionChanged に切り替える必要があると思います。

これは私が持っているものです:

// MyItemViewModel is a viewmodel for a TreeViewItem
// MyCollection is bound to hte Treeview's ItemsSource

    public class MyCollection : ObservableCollection<MyItemViewModel>
    {
        protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
        {
            switch (e.Action)
            {
                case NotifyCollectionChangedAction.Add:
                    // i like to have the UIelement which was added to the collection
                    // (e.NewItems contains the FrameworkElement's DataContext)
                    break;
            }
        }
    }

できる限りMVVMに従っていますが、ビューモデルにビュー要素を保持したくありません。アイテムが追加されたときに発生するイベントが好きです。これにより、新しく追加された UIElement がその送信者または EventArgs に提供されます。

私はすでに ItemContainerGenerator クラスを試しましたが、既に UIElement コントロールを必要とするため、ビューモデル内では役に立ちません。

4

1 に答える 1

1

この問題を間違った方向から見ているようです... MVVM では、ほとんどの場合、UI をほとんど忘れることができます。したがって、ユーザーが UI のコレクション コントロールに追加したアイテムを取得する方法を考える代わりに、UI コレクション コントロールにデータバインドされたビュー モデルのデータ コレクションに追加したデータ オブジェクトにアクセスすることを考えてください。ユーザーによって開始されたへの応答。ICommand

だから私には、イベントではなくデータバインドされたコレクションに新しいアイテムを追加するUIで にICommand接続されているを実装する必要があるように思えます。このようにして、すべてのデータ項目の状態を常に把握できます。Button

于 2013-10-23T09:38:08.600 に答える