2017-08-17 68 views
0

我試圖將多個TreeView綁定到包含TreeViewItems的同一個ItemSource。每當我這樣做,最後一個加載是唯一一個顯示項目。 (所以,如果我有一個特定的順序聲明瞭三個樹視圖,中聲明的最後一個將顯示的項目只有一個。)將多個TreeViews綁定到同一個ItemSource

這是缺省設置的樣本WPF項目我創建以顯示它:

XAML:

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    DataContext="{Binding RelativeSource={RelativeSource Self}}" 
    Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 
     <TreeView x:Name="TreeOne" ItemsSource="{Binding TreeItems}" HorizontalAlignment="Left" Height="300" Margin="10,10,0,0" VerticalAlignment="Top" Width="238"/> 
     <TreeView x:Name="TreeTwo" ItemsSource="{Binding TreeItems}" HorizontalAlignment="Left" Height="300" Margin="10,10,0,0" VerticalAlignment="Top" Width="239" Grid.Column="1"/> 
    </Grid> 
</Window> 

代碼背後:(我使用MVVM在真實項目,但這種具有相同的錯誤)

using System.Collections.Generic; 
using System.Collections.ObjectModel; 
using System.Windows; 
using System.Windows.Controls; 

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      TreeItems = new ObservableCollection<TreeViewItem>() { new TreeViewItem() { Header = "First item" } }; 
      InitializeComponent(); 
     } 

     public ObservableCollection<TreeViewItem> TreeItems { get; set; } 
    } 
} 

picture of the output of the above code

如果我註釋掉第二棵樹,第一棵樹會正常顯示。

回答

2

TreeViewItem s是控件,不能同時在多個可視化樹中顯示(與TreeView不同!)。要解決該問題,請使用字符串集合(new ObservableCollection<string> { "First item" };)。如果當你有一個複雜的數據objectsuse模板功能,爲他們的可視化,e.g:

TreeItems = new ObservableCollection<DateTime>() 
{ 
    new DateTime(2017, 1, 1), 
    new DateTime(2017, 12, 31) 
}; 

XAML

<Window.Resources> 

    <DataTemplate x:Key="DateItem"> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Text="{Binding Path=Year}"/> 
      <Border Background="Green" Width="2" Height="2"/> 
      <TextBlock Text="{Binding Path=Month}"/> 
      <Border Background="Green" Width="2" Height="2"/> 
      <TextBlock Text="{Binding Path=Day}"/> 
     </StackPanel>    
    </DataTemplate> 

</Window.Resources> 

<TreeView x:Name="TreeOne" ItemTemplate="{StaticResource DateItem}"/> 
<TreeView x:Name="TreeTwo" ItemTemplate="{StaticResource DateItem}"/> 
+0

感謝。這絕對是正確的答案。不幸的是,我的主要複雜數據對象擴展了一個控件,回想起來這是一個糟糕的決定,但現在它已經根深蒂固了。我想我必須通過複製代碼來快速修補它,以便使用單獨的數據源對每棵樹應用相同的修改。 :( – autogenerated7331

相關問題