我正在实现Master-Detail视图(尝试使用MVVM)。主文件是ListBox
,包含5种不同类型的项目(在主文件中格式相同)。细节具有不同的表单字段,具体取决于在主服务器中选择的对象类型。我在CodeProject tutorial之后使用了DataTemplateSelector
。根据{{1}}中选择的项目选择了正确的模板,但有一个奇怪的引用问题。
如果我从主人ListBox
中的一个项目转到Type1
的另一个项目,他们将使用完全相同的模板。这听起来不错,但由于它是相同的参考,因此第一项中正在进行的任何动画都将显示在第二项中。 如何强制单独应用模板,以便一个视图中的动画与另一个视图对模板的使用分开?
代码示例:(Type1
呈现详细信息)
ContentControl
编辑 - 添加动画代码
此动画代码通过作用于SelectionChanged事件的行为在ComboBox上执行。在运行之前,我检查一下ComboBox是否专注。此动画仅在未聚焦时才会发生,作为视觉提示,必须修改之前的选择。
<ContentControl Content="{Binding Path=CVS.View.CurrentItem}">
<ContentControl.ContentTemplate>
<DataTemplate>
<vms:MyTemplateSelector Content="{Binding}">
<vms:MyTemplateSelector.Template1>
<DataTemplate>
<views:Type1View />
</DataTemplate>
</vms:MyTemplateSelector.Template1>
<vms:MyTemplateSelector.Template2>
<DataTemplate>
<views:Type2View />
</DataTemplate>
</vms:MyTemplateSelector.Template2>
<vms:MyTemplateSelector.Template3>
<DataTemplate>
<views:Type3View />
</DataTemplate>
</vms:MyTemplateSelector.Template3>
<vms:MyTemplateSelector.Template4>
<DataTemplate>
<views:Type4View />
</DataTemplate>
</vms:MyTemplateSelector.Template4>
<vms:MyTemplateSelector.Template5>
<DataTemplate>
<views:Type5View />
</DataTemplate>
</vms:MyTemplateSelector.Template5>
</vms:MyTemplateSelector>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
Extensions.Clone来自Silverlight forums