簡體   English   中英

如何獲取 TreeViewItem 的參數 object

[英]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.

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