我最近开始学习WPF + MVVM。我可能有完全错误的操作杆或错误的操纵杆。 p>
我正在尝试创建一个简单的订单应用,它有订单商品,每个订单都有lineitems。主页上有两个部分(首先是它们都是用户控件)。
顶部绑定到订单列表。底部绑定到当前选定的订单(想法是它将显示该订单的详细信息)。
详情视图需要能够查看/编辑和添加新项目。为此我想我应该有两个视图/模板,编辑顺序视图和新的顺序视图/模板。在我阅读期间,我遇到了数据表,并认为这是实现这一目标的好方法。
在我的mainwindow.xaml中,我将订单列表视图绑定如下:
<ContentControl Content="{Binding Path=OrdersViewModel}"
视图连接在资源文件中:
<DataTemplate DataType="{x:Type vm:AllOrdersViewModel}">
<vw:AllOrdersView />
</DataTemplate>
这很有效,当应用程序启动时,它们会显示订单。我对订单详细信息做了同样的事情(即它只设置了数据类型而不是任何键定义。这很好用,如果没有选择订单那么视图就不会显示,当选择订单时它会显示出来
我目前正在尝试将其更改为模板,以便我可以动态切换模板/视图,以便当用户点击新订单时(viewmodel有一个枚举,说明订单的当前状态,所以我会检查对于枚举值),视图应该改变。
如果我尝试以下操作,它会爆炸。应用程序启动,显示订单列表(此时没有选择订单),并显示详细信息视图,然后其中一个转换器将因dependencyproperty.unsetvalue而爆炸,(旁注,我应该经常检查那?)。理想情况下,我不希望在选择订单之前显示视图:
<ContentControl Content="{Binding Path=OrderViewModel}" ContentTemplate="{StaticResource ordertemplate}" />
<DataTemplate x:Key="ordertemplate">
<TextBlock Text="hello" />
</DataTemplate>
我主要有两个问题:
1)如何在显示数据之前停止显示模板?
2)如何根据枚举动态切换视图/模板?
答案 0 :(得分:2)
用于这种情况的最直接的机制是DataTemplateSelector,它包含您编写的代码,可以检查绑定对象,在本例中是您的ViewModel,并选择要使用的相应模板,包括处理no的情况细节选择。
<ContentControl Content="{Binding Path=OrderViewModel}"
ContentTemplateSelector="{StaticResource MyCustomSelector}" />