C# 更新列表框项目
我有一个带有节点的树状视图,所以当我单击其中一个节点时,我将使用绑定到可观察集合的项更新列表框,这很好。接下来,当我单击树视图中的另一个节点时,我必须使用不同的数据更新列表框,这也是一个Obsv.Collection。关于如何进行这项工作有什么想法吗C# 更新列表框项目,c#,wpf,xaml,C#,Wpf,Xaml,我有一个带有节点的树状视图,所以当我单击其中一个节点时,我将使用绑定到可观察集合的项更新列表框,这很好。接下来,当我单击树视图中的另一个节点时,我必须使用不同的数据更新列表框,这也是一个Obsv.Collection。关于如何进行这项工作有什么想法吗 <Resources> <DataTemplate x:Key="clipsource"> <StackPanel> <Image Name="img" Wi
<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>
我有另一个Obs v集合静止项目,我必须将其绑定到列表框以显示另一个视图您可以尝试以下操作:
<TreeView Name="MyTreeView">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="Header" Value="{Binding Path=Name}"/>
<Setter Property="ItemsSource" Value="{Binding Path=SomeItems}"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
<ListBox ItemsSource="{Binding ElementName=MyTreeView, Path=SelectedItem.SomeItems}">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Content" Value="{Binding Path=Name}"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
在树视图中选择一个项目时,子项将显示在列表框中
编辑:
要填充TreeView,请使用以下代码:
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 };
我看到您正试图将xaml粘贴为注释。你可以编辑你的问题。在第一次节点单击时,可以显示填充列表框的代码吗?基本思想:将listbox.ItemsSource数据绑定到TreeView的SelectedItem属性。
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;
}
}
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 };