我在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
有人可以建议一种方法吗?
答案 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。