私はWPFが初めてで、MVVMを使用しています。ユーザーがメニューで選択した内容に応じて、異なるコンテンツを表示したいビューがあります。それらの1つは、ビューモデル(TempVM)を持つ別のユーザーコントロールTempであるため、これを行っています:
<ContentControl Content="{Binding Path=TempVM}"/>
TempVM (TempViewModel 型) は、ユーザーがボタンをクリックするまで null です。そのデータテンプレートはこれ
<DataTemplate DataType="{x:Type vm:TempViewModel}">
<view:Temp />
</DataTemplate>
それは問題ありませんが、もう 1 つやりたいことは、ユーザーが別のメニュー項目をクリックしたときにリストボックスを表示することです。だから私はやろうとしています
<ContentControl Content="{Binding Path=Missions}"/>
(Missions は、MissionData の監視可能なコレクションです)、次のようにテンプレート化しようとしています。
<DataTemplate DataType="{x:Type ObservableCollection(MissionData)}">
<StackPanel>
<ListBox ItemsSource="{Binding}" SelectedItem="{Binding Path=MissionData, Mode=TwoWay}" DisplayMemberPath="MissionName" SelectedValuePath="MissionId" />
<Button Content="Go"/>
</StackPanel>
</DataTemplate>
しかし、コンパイラは型参照を好みません。テンプレートにキーを与え、ContentControl でそのキーを指定して実行しようとすると、機能しますが、明らかにミッションがないときに ListBox とボタンが表示されます。明らかに、ユーザー コントロールとビューモデルを作成し、TempVM で行ったのと同じパターンに従うことができますが、それはやり過ぎのようです。私はこれについて正しい道を進んでいますか?何をする必要がありますか?