我是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