Fallow是我的wpf listview的代码。我正在创建listitems programaticaly并按ItemFamily对它们进行分组然后当我点击名为car的搜索按钮项时被选中。但ItemGroup包含项目" car"仍然已折叠。我希望此项目组在程序化选择其子项目时自动展开。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication4
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
List<User> items = new List<User>();
items.Add(new User() { Name = "Dhal", Price = "42", Tax = "A", Barcode = "12345", ItemFamily = "Food" });
items.Add(new User() { Name = "Dhal", Price = "42", Tax = "A", Barcode = "12345", ItemFamily = "Food" });
items.Add(new User() { Name = "Dhal", Price = "42", Tax = "A", Barcode = "12345", ItemFamily = "Food" });
items.Add(new User() { Name = "Dhal", Price = "42", Tax = "A", Barcode = "12345", ItemFamily = "Food" });
items.Add(new User() { Name = "Car", Price = "42", Tax = "A", Barcode = "12345", ItemFamily = "Toys" });
items.Add(new User() { Name = "Bus", Price = "42", Tax = "A", Barcode = "12345", ItemFamily = "Toys" });
items.Add(new User() { Name = "Water Gun", Price = "42", Tax = "A", Barcode = "12345", ItemFamily = "Toys" });
items.Add(new User() { Name = "Rubics Cube", Price = "42", Tax = "A", Barcode = "12345", ItemFamily = "Toys" });
items.Add(new User() { Name = "Sun & Fun", Price = "42", Tax = "A", Barcode = "12345", ItemFamily = "Helth Care" });
items.Add(new User() { Name = "Face Wash", Price = "42", Tax = "A", Barcode = "12345", ItemFamily = "Helth Care" });
items.Add(new User() { Name = "LED TV 15\"", Price = "42", Tax = "A", Barcode = "12345", ItemFamily = "Electronics" });
items.Add(new User() { Name = "Sub woofer", Price = "42", Tax = "A", Barcode = "12345", ItemFamily = "Electronics" });
items.Add(new User() { Name = "Lava Lamp", Price = "42", Tax = "A", Barcode = "12345", ItemFamily = "Electronics" });
items.Add(new User() { Name = "Play Station Portable", Price = "42", Tax = "A", Barcode = "12345", ItemFamily = "Electronics" });
lvUsers.ItemsSource = items;
CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(lvUsers.ItemsSource);
PropertyGroupDescription groupDescription = new PropertyGroupDescription("ItemFamily");
view.GroupDescriptions.Add(groupDescription);
KeyboardNavigation.SetTabNavigation(lvUsers, KeyboardNavigationMode.Cycle);
lvUsers.Items.SortDescriptions.Add(new System.ComponentModel.SortDescription("ItemFamily", System.ComponentModel.ListSortDirection.Ascending));
lvUsers.Items.SortDescriptions.Add(new System.ComponentModel.SortDescription("Name", System.ComponentModel.ListSortDirection.Ascending));
}
public class User
{
public string Name { get; set; }
public string Price { get; set; }
public string Tax { get; set; }
public string ItemFamily { get; set; }
public string Barcode { get; set; }
public int index { get; set; }
}
private int indexed_items;
private bool find(string str)
{
int i = -1;
foreach (User item in lvUsers.Items)
{
i++;
if (item.Name.Equals(str))
{
indexed_items = i;
return true;
}
}
return false;
}
private void select(string str)
{
List<User> items1 = new List<User>();
foreach (User item in lvUsers.Items)
{
if (item.Name.Equals(str))
{
lvUsers.SelectedIndex = indexed_items;
lvUsers.ScrollIntoView(item);
}
items1.Add(item);
}
}
private void btnsearch_Click(object sender, RoutedEventArgs e)
{
if (find("Car"))
{
select("Car");
}
else
{
MessageBox.Show("Not found");
}
}
}
}
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid removed="Aqua">
<ListView Name="lvUsers" removed="Transparent" BorderThickness="0">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Height" Value="45" />
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Width="20" DisplayMemberBinding="{Binding space}" />
<GridViewColumn Header="Control" Width="410" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=Name}" Width="400" Foreground="Black" Height="40" Margin="0" FontSize="20" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Control" Width="210" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=Price}" Width="200" Foreground="Black" Height="40" Margin="0" FontSize="20" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Expander Name="Expander">
<Expander.Header>
<StackPanel Name="expnder_stackpanel" Orientation="Horizontal" Height="75">
<Canvas>
<TextBlock Text="{Binding Name}" FontWeight="Bold" Foreground="White" FontSize="22" VerticalAlignment="Bottom" Canvas.Top="20" Canvas.Left="50" />
<TextBlock Text="{Binding ItemCount}" FontSize="22" Foreground="White" FontWeight="Bold" FontStyle="Italic" Margin="10,0,0,0" Canvas.Left="500" VerticalAlignment="Bottom" Canvas.Top="20" />
<TextBlock Text=" item(s)" FontSize="22" Foreground="Silver" FontStyle="Italic" VerticalAlignment="Bottom" Canvas.Top="20" Canvas.Left="400" />
</Canvas>
</StackPanel>
</Expander.Header>
<ItemsPresenter/>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</ListView.GroupStyle>
</ListView>
<Button Content="Search" Width="200" Height="50" Name="btnsearch" Click="btnsearch_Click" />
</Grid>
</Window>