私はC#を初めて使い、単純なCrudアプリケーションを構築してMVVMを学びたいと思っています。私のアプリケーションでは、ユーザーがクリックするとそのユーザーコントロールを読み込む一連のボタンが必要です。したがって、 "Add Item"をクリックすると、既存のコントロールがAddItemViewに置き換えられます。私はこれについてどうやって行くのだろうか?これまでに見たmvvmチュートリアルの多くは、MainMindowのコントロールをひとつだけ持っています。MVVMコントロールを交換する
0
A
答えて
3
この種のタスクでは、通常ContentControl
を使用します。コントロールのContent
プロパティをViewModel(たとえばCurrentViewModel
)のプロパティにバインドし、ContentControl
に表示できるViewModelの各タイプのリソースにDataTemplates
を定義します。 ViewModelをCurrentViewModel
に割り当てると、ContentControl
はコンテンツに対して適切なDataTemplate
を選択します。あなたのケースでは
メインのViewModel
private object _currentViewModel;
public object CurrentViewModel
{
get { return _currentViewModel; }
set
{
if (value != _currentViewModel)
{
_currentViewModel = value;
OnPropertyChanged("CurrentViewModel");
}
}
}
App.xaml
<Application.Resources>
<DataTemplate DataType="{x:Type vm:AddItemViewModel}">
<v:AddItemView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:FooViewModel}">
<v:FooView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:BarViewModel}">
<v:BarView />
</DataTemplate>
...
</Application.Resources>
メインビュー
...
<ContentControl Content="{Binding CurrentViewModel}" />
...
、中コマンドを使用して「項目を追加」ボタンをクリックすると、AddItemViewModel
のインスタンスがCurrentViewModel
に割り当てられます。
関連する問題
- 1. 2つのコントロール間の不透明度を交換するストーリーボード
- 2. MVVM - コントロール対ビュー
- 3. ZooKeeperサーバを交換する
- 4. ツイッターボタンを交換する
- 5. マスターリポジトリを交換する
- 6. トピック交換とRabbitMQのダイレクト交換
- 7. 交換
- 8. 交換()
- 9. DTS交換ツール
- 10. Nodejsデータ交換
- 11. フレーム交換?
- 12. AMQP交換タイプ
- 13. ファイル交換API
- 14. SSH鍵交換
- 15. プロローグVAR交換
- 16. 交換は5
- 17. 情報交換
- 18. MVVMを使用してコントロールにコントロールを埋め込む
- 19. ファイルを交換するクライアント - サーバーアーキテクチャJA
- 20. セロビットをクロノスに交換する
- 21. ウェブサイト間でデータを交換する
- 22. マップ要素を交換する方法
- 23. Perfoceでファイルを交換する
- 24. Match3のゲームでタイルを交換する
- 25. observableArrayのアイテムを交換する
- 26. ホバリングで背景を交換する
- 27. コンテンツを交換するには
- 28. Android:2つのオーバーラップビューを交換する
- 29. ファイル内のバイトを交換する
- 30. ListViewのアイテムビューを交換する
単純なデータオブジェクトではなく、アイテムのグループといくつかの機能があります。私はViewModelsの代わりにUserControlsを切り替えることができ、各UserControlは独自のViewModelを持つことさえできますか? –