![](/img/trans.png)
[英]How to bind command on entire Grid LeftClick in WPF User Control
[英]How to bind a grid to a user control
我想創建一個類似於VLC的高級設置菜單的設置菜單:左側為Treeview,右側為某種控件集合。 右側的控件應使用戶能夠操縱與樹視圖中的當前選擇相關的設置。 我考慮過在樹視圖的右邊創建一個網格。 然后,根據選擇,我為每個需要在網格中顯示的視圖提供了一個用戶控件
樹視圖中的項目具有UserControl
屬性,該屬性包含對相關視圖的引用。 我的視圖模型具有SelectedItem屬性,該屬性指示當前在樹視圖中選擇的項目。
現在,我想將網格的內容綁定到我的SelectedItem
的UserControl
屬性。 但是我不知道該怎么做。 我寧願使用基於XAML的解決方案,而不是清除網格的Children
屬性,並在每次SelectedItem
屬性更改時添加要在代碼中顯示的用戶控件。
我建議使用ContentControl
而不是Grid
。
考慮到樹視圖和內容控件在同一個視圖模型下:在您的視圖模型上,為與樹視圖中的項目具有相同類型的所選項目(我們稱其為VMSelectedItem
)添加屬性。
在樹視圖的XAML中添加
SelectedItem="{Binding VMSelectedItem}"
在XAML中的內容控件
Content="{Binding VMSelectedItem.UserControl}"
現在,在樹中進行選擇將更新VMSelectedItem
屬性,該屬性隨后將更新內容控件的內容。
我建議您使用在資源字典中聲明的DataTemplates。 您將只使用每個DataTemplate的一個實例,這會留下良好的內存占用。 您不需要將視圖實例存儲在視圖模型中,這是mvvm的基本思想。 視圖模型將完全只保存數據和信息,以及您希望如何顯示數據。
例如,您的視圖模型中有一個枚舉,其值是person,car,tree。 在您的DataTemplateSelector內部,您將在該枚舉上有一個if,該返回值將返回所需的DataTemplate。
基本上,您將所有事情都集中在了每個地方,而不是每個TreeViewItem都有。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.