我是WPF的新手,并将从VC++ 6.0/MFC应用程序移植到c#/ WPF(VS2013)。我的Windows开发大部分都在VC++/MFC中。我试图坚持使用MVVM模式,并且正在撰写一些概念应用程序的证明,以便让我的脚湿润。到目前为止,我有一个棘手的问题。WPF在同一个窗口中更改Datacontexts和视图
当我的应用程序启动时,它将呈现客户和账单的树视图。我已经使用一个简单的分层数据模板,并且每个级别绑定到我的本地数据类型(视图模型),可以很好地工作。我想要发生的是当一个账单被选中(现在我有一个按钮在账单模板上)我希望树状图被替换为账单的详细视图(我不想让对话框弹出向上)。
XAML中的是这样的:
<DockPanel>
<TreeView x:Name="trvGroups" ItemsSource="{Binding LBGroups}" VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.VirtualizationMode="Recycling">
<TreeView.ItemContainerStyle>
<!--
This Style binds a TreeViewItem to a LBtreeViewItemViewModel
-->
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
<Setter Property="FontWeight" Value="Normal" />
</Style>
</TreeView.ItemContainerStyle>
<TreeView.Resources>
<HierarchicalDataTemplate
DataType="{x:Type local:GroupViewModel}"
ItemsSource="{Binding Children}"
>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding GroupName}" />
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate
DataType="{x:Type local:BillViewModel}"
ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding BillName}" />
<Button Command="{Binding Path=BillEditCommand}">Edit</Button>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
</DockPanel>
现在我有比什么都重要的问题。我应该将每个视图定义为用户控件并将其放入window.resources中吗?我是否使用数据模板?我假设我会更改数据上下文以指向明细帐单视图模型。做这个的最好方式是什么?我坚持使用MVVM的理解是,我的目标是在代码背后没有任何东西(或尽可能少)。
我在寻找更多的指针,让我沿着正确的道路开始研究。我现在有点困惑。
在此先感谢。
每个视图应该是一个'UserControl'(或'Window'),并有自己的XAML文件和相应的(大部分是空的)后面的代码文件。您不在'Windows.Resources'中定义视图。但是,您可以在任何可插入标准控件的位置插入“UserControl”,并可显示“窗口”。 – 2014-08-27 20:22:17
业务逻辑进入视图模型。用户界面关注点在代码隐藏中。 MVVM!=没有隐藏代码。 – Will 2014-08-27 20:30:29
阅读关于MVVM中的Master/Details场景 – 2014-08-27 20:30:49