【问题标题】:How to show ListBox Items when TreeView Item is selected选择 TreeView 项时如何显示列表框项
【发布时间】:2013-05-30 13:22:57
【问题描述】:

所以我的任务是为学校构建一个邮件应用程序。我的其中一个部件有问题。

我有一个TreeView 和一个ListBoxTreeView 中的项目很少(收件箱、垃圾箱、草稿)。现在我想做的是,当我选择TreeView 项目时,某些ListBox 项目将出现在ListBox 中。 (ListBox 的目的是显示该“文件夹”中的邮件)。

我一直在研究这个,ListArayDataBinding 有一些建议,但我很新,不知道如何实施这些建议。

我现在拥有的是:

<TreeView Grid.Row="2" Grid.ColumnSpan="1" VerticalAlignment="Stretch" HorizontalAlignment="Left" Margin="10,10,0,10"  Name="treeView1" Width="100" FontSize="14" SelectedItemChanged="treeView1_SelectedItemChanged">
    <TreeViewItem Header="Prejeto" IsSelected="True">
        <TreeViewItem Header="Prebrano" />
        <TreeViewItem Header="Neprebrano" />
    </TreeViewItem>

    <TreeViewItem Header="Poslano" />
    <TreeViewItem Header="Osnutki" />
    <TreeViewItem Header="Izbrisano" />
    <TreeViewItem Header="Nezaželeno" />
    <TreeViewItem />
</TreeView>

XAMLListBox:

<ListBox Name="seznamSporocil" Grid.Column="1" Grid.Row="2"  HorizontalAlignment="Left" Margin="10,10,0,10"  VerticalAlignment="Stretch" Width="100" FontWeight="Bold" FontFamily="Arial" MouseDoubleClick="seznamSporocil_MouseDoubleClick" />

SelectedItemChanged:

private void treeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{

}

【问题讨论】:

标签: c# wpf listbox treeview


【解决方案1】:

使用 WPF 时,data binding 是您最好的朋友。只需将列表框的ItemsSource 与树视图的选定项的某些集合属性绑定即可。

更新

这是完整的示例(只需创建 WPF 应用程序项目)。 型号:

public class MailFolder
{
    public string Name { get; set; }

    public ObservableCollection<MailItem> Items
    {
        get
        {
            return items ?? (items = new ObservableCollection<MailItem>());
        }
    }
    private ObservableCollection<MailItem> items;

    public ObservableCollection<MailFolder> SubFolders
    {
        get
        {
            return subFolders ?? (subFolders = new ObservableCollection<MailFolder>());
        }
    }
    private ObservableCollection<MailFolder> subFolders;
}

public class MailItem
{
    public string Subject { get; set; }
}

XAML:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <TreeView x:Name="MailTreeView" ItemsSource="{Binding}">
            <TreeView.Resources>
                <HierarchicalDataTemplate DataType="{x:Type local:MailFolder}" ItemsSource="{Binding SubFolders}">
                    <TextBlock Text="{Binding Name}"/>
                </HierarchicalDataTemplate>
            </TreeView.Resources>
        </TreeView>

        <ListBox Grid.Column="1" ItemsSource="{Binding Path=SelectedItem.Items, ElementName=MailTreeView}">
            <ListBox.ItemTemplate>
                <DataTemplate DataType="{x:Type local:MailItem}">
                    <TextBlock Text="{Binding Subject}"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>

这是数据上下文设置:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        DataContext = new[] 
        {
            new MailFolder
            {
                Name = "Prejeto",
                SubFolders = 
                {
                    new MailFolder
                    {
                        Name = "Prebrano",
                        Items = 
                        {
                            new MailItem { Subject = "A" },
                            new MailItem { Subject = "B" },
                            new MailItem { Subject = "C" },
                        }
                    },
                    new MailFolder
                    {
                        Name = "Neprebrano",
                        Items = 
                        {
                            new MailItem { Subject = "D" },
                            new MailItem { Subject = "E" },
                        }
                    },
                },
                Items = 
                {
                    new MailItem { Subject = "M" },
                    new MailItem { Subject = "N" },
                }
            },
            new MailFolder
            {
                Name = "Poslano",
                Items = 
                {
                    new MailItem { Subject = "F" },
                    new MailItem { Subject = "G" },
                }
            },
            new MailFolder
            {
                Name = "Osnutki",
                Items = 
                {
                    new MailItem { Subject = "H" },
                }
            },
            new MailFolder
            {
                Name = "Izbrisano",
                Items = 
                {
                    new MailItem { Subject = "I" },
                    new MailItem { Subject = "J" },
                    new MailItem { Subject = "K" },
                }
            },
            new MailFolder
            {
                Name = "Nezaželeno",
                Items = 
                {
                    new MailItem { Subject = "L" },
                }
            }
        };
    }
}

请注意,如果您想反映对模型类属性所做的更改,您需要实现INotifyPropertyChanged 接口。

【讨论】:

  • 好的,这似乎是要走的路。但是你能帮我如何为每个treviewitem创建一个项目集合吗?例如。我在树视图中有树项目,并且我想在列表框中显示每个项目。如何将它们添加到每个树视图项?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
相关资源
最近更新 更多