簡體   English   中英

如何將網格綁定到用戶控件

[英]How to bind a grid to a user control

我想創建一個類似於VLC的高級設置菜單的設置菜單:左側為Treeview,右側為某種控件集合。 右側的控件應使用戶能夠操縱與樹視圖中的當前選擇相關的設置。 我考慮過在樹視圖的右邊創建一個網格。 然后,根據選擇,我為每個需要在網格中顯示的視圖提供了一個用戶控件

樹視圖中的項目具有UserControl屬性,該屬性包含對相關視圖的引用。 我的視圖模型具有SelectedItem屬性,該屬性指示當前在樹視圖中選擇的項目。

現在,我想將網格的內容綁定到我的SelectedItemUserControl屬性。 但是我不知道該怎么做。 我寧願使用基於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM