根据Combobox中选择的项目更改列表视图内容

时间:2015-04-07 04:09:38

标签: c# wpf listview combobox

我在Combobox中有以下3个项目。

                    * All

                    * Item 1

                    * Item 2

与此同时,我有一个如下所示的列表视图。

              * Item 1
                       - Sub - Item 1
                       - Sub - Item 2
                       - Sub - Item 3
              * Item 2
                       - Sub -Item 1
                       - Sub - Item 2
                       - Sub - Item 3
                       - Sub - Item 4

我的要求是这样的。如果在组合框中选择的内容是“第1项”,那么列表视图中显示的内容应如下所示。

             * Item 1
                       - Sub - Item 1
                       - Sub - Item 2
                       - Sub - Item 3

同样,如果组合框中选择的内容是“第2项”,那么lisview中显示的内容应如下所示。

            * Item 2
                       - Sub -Item 1
                       - Sub - Item 2
                       - Sub - Item 3
                       - Sub - Item 4

最后,如果选择“全部”,那么显然它应该显示以下内容。

          * Item 1
                       - Sub - Item 1
                       - Sub - Item 2
                       - Sub - Item 3
          * Item 2
                       - Sub -Item 1
                       - Sub - Item 2
                       - Sub - Item 3
                       - Sub - Item 4

有人可以建议一种方法吗?

2 个答案:

答案 0 :(得分:0)

好吧,我写了简单的实现,希望这是你需要的。 将Xaml代码放入Window:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <ComboBox 
        x:Name="MyCombo" 
        DisplayMemberPath="Name" 
        SelectedValuePath="Name"
        SelectedIndex="0"
        />
    <ListView
        x:Name="MyList"
        Grid.Row="1"
        DisplayMemberPath="SubName"
        >
        <ListView.GroupStyle>
            <GroupStyle>
                <GroupStyle.HeaderTemplate>
                    <DataTemplate>
                        <TextBlock FontWeight="Bold" FontSize="14" Text="{Binding Name}"/>
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
            </GroupStyle>
        </ListView.GroupStyle>
    </ListView>
</Grid>

还有一些代码隐藏:

public class MyItem
{
    public string Name { get; set; }
    public string SubName { get; set; }
    public MyItem(string name, string subName)
    {
        Name = name;
        SubName = subName;
    }
}

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

        var comboBoxItems = new List<MyItem>();
        comboBoxItems.Add(new MyItem("All", null));
        comboBoxItems.Add(new MyItem("Item 1", null));
        comboBoxItems.Add(new MyItem("Item 2", null));
        MyCombo.ItemsSource = comboBoxItems;

        var listViewItems = new List<MyItem>();
        listViewItems.Add(new MyItem("Item 1", "SubItem 1.1"));
        listViewItems.Add(new MyItem("Item 1", "SubItem 1.2"));
        listViewItems.Add(new MyItem("Item 1", "SubItem 1.3"));
        listViewItems.Add(new MyItem("Item 2", "SubItem 2.1"));
        listViewItems.Add(new MyItem("Item 2", "SubItem 2.2"));
        listViewItems.Add(new MyItem("Item 2", "SubItem 2.3"));
        listViewItems.Add(new MyItem("Item 2", "SubItem 2.4"));

        CollectionView view = (CollectionView) CollectionViewSource.GetDefaultView(listViewItems);
        PropertyGroupDescription groupDescription = new PropertyGroupDescription("Name");
        view.GroupDescriptions.Add(groupDescription);
        view.Filter = itemObject =>
            {
                MyItem item = (MyItem) itemObject;
                string comboName = (string) MyCombo.SelectedValue;
                return item.Name == comboName || comboName == "All";
            };
        MyCombo.SelectionChanged += (s, e) => view.Refresh();
        MyList.ItemsSource = view;
    }
}

这里的主要时刻是CollectionView类和其他相关类。这是使用ListView分组的正确方法(据我所知)。

答案 1 :(得分:0)

希望您已为 SubItems 声明了类。然后,您需要将项目的集合绑定到Combobox和SubItems到MainWindow中的ListView。您需要做的是在 ComboBox_SelectionChanged 方法中编写代码,以重置ListView的当前ItemSource并绑定基于所选组合框项目的新项目源。

我尝试过这样的事情,Check here