【发布时间】:2012-04-18 08:37:27
【问题描述】:
我是 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 所做的相同模式,但它似乎过分了。我在这件事上走的是正确的道路吗?我需要做什么?
【问题讨论】:
-
我已经按照链接的答案包装了它,但现在我只看到 (Collection) 而不是 ListBox 和按钮。
-
xaml 还不支持泛型。