我是wpf和MVVM的全新品牌。我有一個主窗口,有兩個視圖左側有一個帶有一個列表框的用戶控件,列表框中有一個編輯按鈕。在右側,我有另一個視圖,其中包含我所有用於查看和編輯記錄的控件。我可以在列表框中選擇一個項目並編輯我的記錄,因爲使用綁定它會自動填充selectedItem對象。我想要做的是當用戶點擊編輯按鈕時顯示右側的視圖,如果他們點擊列表框中包含的另一個按鈕,然後顯示右側的視圖並關閉前一個視圖。我想我在這裏錯過了一個大概念,因爲大多數例子都是簡單化的,只是表現出一種觀點。我真的不想在後面的代碼中做這件事。我看過約翰史密斯標籤,並希望做一些相似的事情,但沒有標籤。任何幫助將不勝感激。使用MVVM顯示視圖的正確方法
2
A
回答
0
這聽起來像兩個視圖需要共享相同的情況下(即視圖模型),那麼他們將留在由依賴屬性的魔法同步automaticall ...
0
我可能會嘗試設置它,這樣既點擊按鈕(查看或編輯)設置右邊框的DataContext。使用基於DataContext的DataTemplates顯示RightFrame視圖。
所以,你的XAML會是這樣的:
<DataTemplate DataType={x:Type MyEditingViewModel}>
<!-- Editing Object View -->
</DataTemplate>
<DataTemplate DataType={x:Type MyViewingViewModel}>
<!-- Viewing Object View -->
</DataTemplate>
和你的按鈕點擊事件是這樣的:
private void EditButton_Click(object sender, EventArgs e)
{
RightFrame.DataContext = new MyEditingViewModel((sender as Button).DataContext)
}
private void ViewButton_Click(object sender, EventArgs e)
{
RightFrame.DataContext = new MyViewingViewModel((sender as Button).DataContext)
}
0
因此,基本上,你想要做的是有您的視圖模型將決定應該呈現哪個視圖,並根據用戶選擇做出該決定。
我是怎樣做到這樣的事情:
我的視圖模型公開一個視圖樣式屬性,這是一個枚舉。在視圖模型(通常是用戶控件)的視圖中,我實現了DockPanel
以包含每種視圖風格。每個DockPanel
被分配了一個樣式和風格的定義是這樣的:
<Style x:Key="Style_View1" TargetType="DockPanel">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ViewStyle}" Value="View1">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
<Style x:Key="Style_View2" TargetType="DockPanel">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ViewStyle}" Value="View2">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
(很明顯,你不需要使用DockPanel
如果Grid
或StackPanel
是更適合您的方案,並可以實現。不同的用戶控制每種風格的視圖,如果你想保持你的代碼很好地分割。)
所以只要ViewStyle
的值是有一個相應的樣式,那個視圖樣式將是可見的。由於所有樣式默認設置Visibility
到Collapsed
,所以最多隻能有一個可見的視圖樣式。
有很多方法可以選擇視圖樣式 - 爲每個視圖樣式創建一個命令並將其綁定到按鈕,創建一組單選按鈕並使用值轉換器,設置視圖樣式以響應其他屬性視圖模型 - 無論什麼作品。
相關問題
- 1. 正確使用MVVM Light Messenger的方法
- 2. 無法正確顯示CATiledLayer的視圖
- 3. Unity添加顯示視圖的正確方法
- 4. MVVM - 如何顯示視圖?
- 5. 在MVVM的主視圖中使用MVVM並排顯示位置視圖?
- 6. WPF MVVM正確方法從視圖模型
- 7. 在codeIgniter視圖中使用Model的方法的正確方法?
- 8. WPF和MVVM,正確的方法
- 9. 縮略圖在Drupal 8的視圖中無法正確顯示
- 10. MVVM的正確實現,用於以不同的顯示技術在兩個視圖中顯示的數據
- 11. jquery顯示範圍的正確方法
- 12. Datagrid視圖顯示不正確
- 13. 視頻無法正確顯示
- 14. 正確顯示/隱藏地圖覆蓋圖的方法
- 15. 這是使用MVVM Light Messenger類的正確方法
- 16. WPF:使用MVVM模式執行Tabcontrol的正確方法
- 17. 視圖控制器未以正確的方向顯示
- 18. 正確的方式來顯示今日視圖控件內容
- 19. 使用MVVM模式調用自定義Control或UserControl方法的正確方法?
- 20. Ionic 2 - 顯示視頻的正確方法
- 21. 地圖路徑視圖無法正確顯示
- 22. jquery移動列表視圖圖標無法正確顯示
- 23. MVVM綁定未顯示在視圖中
- 24. 視圖控件顯示/隱藏WPF MVVM
- 25. MVVM Light - 顯示當前視圖?
- 26. HeatMap無法正確顯示使用ggplot()
- 27. Text.setText()在ViewPager的當前視圖中無法正確顯示
- 28. 列表視圖中的第一項無法正確顯示
- 29. Odoo 10 POS Android的web視圖無法正確顯示
- 30. ListView顯示父視圖,將不會採取正確的看法?
其實第二個視圖將是一個不同的數據上下文我有關於第二個視圖上的一個視圖和卡信息的員工信息。僱員可以擁有一個或多個與之相關的卡片。所以我想通過在列表框中選擇的按鈕調出編輯員工視圖,然後如果他們選擇列表框記錄上的卡片按鈕,我想調出卡片視圖。我可以在後面的代碼中做到這一點,但是想要遵循我迄今爲止所做的MVVM模式,但是由於我不知道如何告訴主窗口需要顯示特定視圖,所以沒有面對代碼。 – spafa9 2010-08-26 14:20:28
想我終於連接了所有的點。我使用喬希史密斯的例子作爲指導。我已經把它放在了現在的視圖中,只需要在編輯另一條記錄時關閉它。 – spafa9 2010-08-26 18:17:23