2012-04-12 15 views
1

Ich habe eine TreeView mit Knoten, wenn ich also auf einen der Knoten klicke, werde ich die ListBox mit Elementen aktualisieren, die an eine Observable Collection gebunden sind, was gut funktioniert. Als nächstes, wenn ich auf einen anderen Knoten in meiner Baumansicht klicke, muss ich die ListBox mit anderen Daten aktualisieren (was auch eine Obsv.Collection ist). Irgendwelche Ideen, wie man damit fortfährt?Aktualisieren der ListBox Items

<Resources> 
    <DataTemplate x:Key="clipsource"> 
     <StackPanel> 
      <Image Name="img" Width="125" Height="70" Margin="1,0" Source="{Binding Path=Path, Converter= {x:Static l:UriToThumbnailConverter.Instance}}"/> 
      <TextBlock FlowDirection="LeftToRight" FontFamily="Arial" FontSize="12" Text="{Binding Path = DisplayClipName}"/> 
     </StackPanel> 
    </DataTemplate> 
</Resources> 
<Grid Height="Auto" Grid.Column="2" VerticalAlignment="Stretch" x:Name="RightPane_grid" Margin="2,0,0,0" KeyboardNavigation.DirectionalNavigation="None"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="21.205"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <Rectangle Fill="#FF232323" Stroke="#FF000000" RadiusX="3" RadiusY="3" Margin="0,0,0,0" x:Name="Right_Pane_bkg" Grid.ColumnSpan="1" Grid.RowSpan="2" KeyboardNavigation.DirectionalNavigation="None"/> 
    <ListBox Name="ListBox1" SelectionMode="Extended" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto" Grid.Row="0" Background="#FF3B3B3B" Margin="2,25,2,2" ItemsSource="{Binding}" ItemTemplate="{StaticResource clipsource}"> 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <WrapPanel /> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
     <ListBox.ItemContainerStyle> 
      <Style TargetType="{x:Type ListBoxItem}"> 
       <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}"/> 
      </Style> 
     </ListBox.ItemContainerStyle> 
    </ListBox> 
</Grid> 

-Code Behind:

private void Handle_Click1(object sender, MouseButtonEventArgs e) // tree view Item 
{ 
    ListBox1.DataContext = Clips Items; 
    // Clips Items is an Obs v. Collection 
} 

habe ich eine andere Obs v Sammlung noch Gegenstände, die ich habe es auf dem Listenfeld gebunden

eine andere Ansicht zu zeigen
+0

Ich sehe, Sie versuchen, die XAML als Kommentar einfügen. Sie können Ihre Frage bearbeiten. put that there –

+1

Können Sie den Code anzeigen, der die Listbox beim ersten Klick des Knotens füllt? – Steve

+0

Grundlegende Idee: Datadind die ListBox.ItemsSource an die SelectedItem-Eigenschaft der TreeView. –

Antwort

0

Sie können versuchen, die folgenden:

Die Bindung ruft die in der ListBox angezeigten Elemente aus SelectedItem ab in der Baumansicht mit dem Pfad SomeItems. Dies setzt voraus, das SelectedItem so etwas wie diese:

public class MyTreeViewItem 
{ 

    public string Name { get; private set; } 
    public ObservableCollection<MyTreeViewItem> SomeItems { get; private set; } 

    public MyTreeViewItem(string name) 
    { 
     if (name == null) 
      throw new ArgumentNullException("name"); 

     this.SomeItems = new ObservableCollection<MyTreeViewItem>(); 
     this.Name = name; 
    } 

} 

Wenn Sie ein Element in der Strukturansicht wählen die Kinder sind in der List-Box angezeigt.

Edit:

die TreeView So füllen Sie den folgenden Code verwenden:

 MyTreeViewItem a = new MyTreeViewItem("A"); 
     a.SomeItems.Add(new MyTreeViewItem("A1")); 
     a.SomeItems.Add(new MyTreeViewItem("A2")); 
     a.SomeItems.Add(new MyTreeViewItem("A3")); 

     MyTreeViewItem b = new MyTreeViewItem("B"); 
     b.SomeItems.Add(new MyTreeViewItem("B1")); 
     b.SomeItems.Add(new MyTreeViewItem("B2")); 
     b.SomeItems.Add(new MyTreeViewItem("B3")); 

     this.MyTreeView.ItemsSource = new MyTreeViewItem[] { a, b };