0

私は、ユーザーがプロセスのフローチャートを作成できるようにする WPF アプリケーション (MVVM パターンを使用) を開発する初期段階にいます。

予備ビューは次のようになります。ここに画像の説明を入力

左側のペインのシンボルは WPF パス オブジェクトです。

ユーザーがシンボルをシンボル パネルからダイアグラム部分にドラッグできるようにする必要があります。

コード ビハインド イベントを使用してストレート WPF で行うのは非常に簡単ですが、MVVM パターンを使用してこれを実装する方法について提案が必要です。私のモデルには、キャンバスにドラッグされたすべてのシンボルを含む Observable コレクションがあると思います (?)。シンボルがキャンバスにドラッグされるたびに、そのコレクションを更新するにはどうすればよいでしょうか?

理想的には、MVVM を使用する場合、ビューのコード ビハインドは完全に空でなければならないことを理解していますが、ビューでイベントを排他的に処理するコードをそこに配置すると、パターンが壊れますか?

どんな助けでも大歓迎です。

4

2 に答える 2

1

キャンバスのViewModelで、プロパティを定義します

public ObservableCollection<SymbolViewModel> Symbols { get; }

ビューで、を使用しItemsControlてシンボルを表示します。

<ItemsControl ItemsSource="{Binding Symbols}" ... />

もちろん、で定義された適切なデータテンプレート、アイテムテンプレート、およびアイテムパネルが必要ですItemsControl

ObservableCollectionは、ItemsControlが自動的に更新されることを保証するINotifyCollectionChangedを実装します。

于 2012-06-07T07:00:42.770 に答える
1

任意のイベントがMVVMにどのように適合するかについて質問している場合は、MVVM は抽象化に関するものであり、つまり、それが何であるか、および基礎となるものが何であるかを認識していないことを覚えてViewおくViewModel必要ModelがありViewます。ViewModelModel

この考えに固執すると、2つの視点があります。

1. If a view based event is handled in the code behind of the view (such as in `MyView.xaml.cs`) then as long as it does not refer the model or the viewmodel, it is perfectly fine in MVVM. Because such event handler is strictly a `View` specific code and should remain confined in the View layer (XAML or XAML.CS).

2. If an event handler has to refer the model or the viewmodel then it should not be handled in the code behind of the view but should be converted into `Command` based behavior using Attached Properties.

ドラッグドロップのシナリオでは、2 番の方法をお勧めします。添付プロパティと MVVM wrt イベントについては Google を使用すると、良い例が見つかります。

于 2012-06-07T08:37:51.963 に答える