[英]How to get the parant object of TreeViewItem
我想在我的 ViewModel 中使用父 Treeview 節點的值設置一個屬性,但無法獲得正確的方法。 這是代碼:
private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
if (e.NewValue.GetType() == typeof(Customer))
{
this.MainViewModel.SelectedCustomer = (Customer)e.NewValue;
this.MainViewModel.FinishConSiteCommand.RaiseCanExecuteChanged();
}
else
{
this.MainViewModel.SelectedConstructionSite = (ConstructionSite)e.NewValue;
// here I want to set "this.MainViewModel.SelectedCustomer" this is the parent node.
this.MainViewModel.FinishConSiteCommand.RaiseCanExecuteChanged();
}
}
和 XAML
<TreeView x:Name="treeView" ItemsSource="{Binding ConstructionSiteDictionary.Values}" SelectedItemChanged="TreeView_SelectedItemChanged">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding ConstructionSites}">
<Label Content="{Binding DisplayableInfos}"/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Name}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView
誰能幫我? 謝謝: :)
好的,我為自己的問題找到了解決方案:
private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
if (e.NewValue.GetType() == typeof(Customer))
{
this.MainViewModel.SelectedCustomer = (Customer)e.NewValue;
this.MainViewModel.FinishConSiteCommand.RaiseCanExecuteChanged();
}
else
{
this.MainViewModel.SelectedConstructionSite = (ConstructionSite)e.NewValue;
Customer customer = null;
foreach (Customer c in this.MainViewModel.ConstructionSiteDictionary.Values)
{
foreach (ConstructionSite site in c.ConstructionSites)
{
ConstructionSite selecetedSite = (ConstructionSite)e.NewValue;
if (site == selecetedSite)
customer = c;
}
}
this.MainViewModel.SelectedCustomer = customer;
this.MainViewModel.FinishConSiteCommand.RaiseCanExecuteChanged();
}
}
這很好用,但是當 ConstructionSiteDictionary 有大量數據時,運行時復雜性不是很好。 有沒有人更好的解決方案?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.