TabControl
オブジェクトのコレクションを提示しているがありますFoo
(それぞれを介してFooViewModel
)。タブアイテムのリストの最後に、何もモデル化しないが、新しいモデルアイテムを作成し、クリックするとコレクションに追加する偽のタブアイテムが必要です。
概念が明確でない場合、実際の例はInternetExplorerのタブです。これにはn+1
タブアイテムがあります。n
ページコンテンツがあり、最後のアイテムは新しい「実際の」タブを追加します。
MVVMでこのタイプの相互作用をモデル化する正しい方法(ある場合)は何ですか?私が考えたオプションは次のとおりです。
ビューモデルの一部にします。コントロールがバインドされているコレクションの最後に
IEnumerable<FooViewModel> Foos
、「新しいアイテム」センチネルを追加し、「実際のfooまたは新しいfooセンチネル」ロジックをビューモデルに構築します。完全にビューの一部にします。テンプレートを再作成(および/またはサブクラス)
TabControl
して、すべての実際のアイテムを表示し、コマンドを呼び出して新しいアイテムを作成および挿入するボタンも表示します。
最初のオプションは、ビューの詳細がビューモデルにリークしているように、最初は間違っているように感じます(「新規追加Foo
」は一般的なコマンドである可能性が高く、一部のビューではタブリストから呼び出し可能にしたくない場合があります)。ただし、初期化プロセスでは「半構築」をモデル化する必要があるため、ある程度の意味がありますFoo
。したがって、「まだ存在しない」のモデルはFoo
それほど遠くないように見えます。
2番目の部分は、多くの作業のように見え、また簡単に失敗するようです(他のタブのように見えて感じることが望ましいと仮定します)。
しかし、私はMVVMを初めて使用します。確かにこれはかなり頻繁に出てきます。多分私は完全に何かが欠けています。それに対処するための伝統的な方法は何ですか?