我是 WPF 新手并使用 MVVM。我有一个视图,我想根据用户在菜单上选择的内容显示不同的内容。其中之一是另一个具有视图模型(TempVM)的用户控件 Temp,所以我这样做:
<ContentControl Content="{Binding Path=TempVM}"/>
并且 TempVM(类型为 TempViewModel)在用户单击按钮之前为空。它的数据模板是这样的
<DataTemplate DataType="{x:Type vm:TempViewModel}">
<view:Temp />
</DataTemplate>
这很好,但我想做的另一件事是当用户单击不同的菜单项时显示一个列表框。所以我想做
<ContentControl Content="{Binding Path=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 所做的相同模式,但它似乎过分了。我在这件事上走的是正确的道路吗?我需要做什么?