代碼以下僅用於MVVM的引導目的。它可能會/可能不會編譯。
方法1:
假設你TreeViewItemViewModel
是樹中的所有樹視圖項的基本項目的水平視圖模型數據上下文,加入TreeViewItemViewModel
可寫屬性調用IsSelected
。不要忘記通知IsSelected
的安裝人員。
在您的XAML樹視圖中添加的Style
以下針對性的TreeViewItem
....
<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
</TreeView.Resources>
當任何TreeView中被選中這樣一來,只有自己的TreeViewItemViewModel
的IsSelected
屬性將是真實的,並休息所有樹視圖項目將是錯誤的。因此,剩下的任務是從與TreeView
的ItemsSource
綁定的對象的層次結構中找到所選的TreeViewItemViewModel
對象。
方式2:
有一個TreeViewItem附加屬性和處理其MouseDown事件。檢查TreeViewItem的「IsSelected」值是否爲真,並提取其數據上下文,該數據上下文將是選定的TreeViewItemViewModel
。
<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="local:MyAttachedBehavior.HandleMouseDown" Value="true" />
</Style>
</TreeView.Resources>
靜態HandleMouseDownPropertyChanged()依賴屬性改變的方法
,關於辦理(TreeViewItem)sender
MouseDown事件......
((TreeViewItem)sender).MouseDown += TreeViewMouseDownEventHandler;
private static TreeViewMouseDownEventHandler(object sender, MouseButtonEventArgs e)
{
var treeViewItem = (TreeViewItem)sender;
if (treeViewItem.IsSelected)
{
var mySelectedItem = treeViewItem.DataContext as TreeViewItemViewModel;
}
}
通過這個選擇`TreeViewItemViewModel」實例爲需要選擇的項目到你的日常。
讓我知道這是否有幫助。
感謝您的回答! RegionViewModel有一個父屬性,可以訪問StateViewModel。 StateViewModel有一個Children屬性,它是RegionViewModel的集合。我不允許發佈項目代碼,但如果你需要我會創建一個repro併發布它 – ganeshran
我認爲我錯讀了你的問題......你有兩種編輯方法,一種是在RegionViewModel中,它可以在雙擊上工作,一個在MainViewModel(?)中應該在Button Click上工作? – Rachel
我在RegionViewModel中有一個編輯方法,它將消息傳遞到另一個視圖模型以加載要編輯的區域。 在MainViewModel中,我想要訪問在Treeview中選擇的RegionViewModel對象,這樣我就可以傳遞消息來加載區域進行編輯 – ganeshran