2,854 questions
Hi,
Welcome to our Microsoft Q&A platform!
You can use my demo:
public partial class MainWindow : Window
{
ObservableCollection<MyClass> list = new ObservableCollection<MyClass>();
public MainWindow()
{
InitializeComponent();
list.Add(new MyClass() { SomeBool = false, SomeInteger = 1, SomeString = "3" });
list.Add(new MyClass() { SomeBool = false, SomeInteger = 2, SomeString = "2" });
list.Add(new MyClass() { SomeBool = true, SomeInteger = 3, SomeString = "3" });
this.DataContext = list;
}
private void ListViewControl_Click(object sender, RoutedEventArgs e)
{
if (e.OriginalSource is GridViewColumnHeader)
{
GridViewColumn clickedColumn = (e.OriginalSource as GridViewColumnHeader).Column;
string bindingProperty=null;
if (clickedColumn != null)
{
if (clickedColumn.Header.ToString() == "column1")
{
bindingProperty = "SomeInteger";
}
if (clickedColumn.Header.ToString() == "column2")
{
bindingProperty = "SomeString";
}
if (clickedColumn.Header.ToString() == "column3")
{
bindingProperty = "SomeBool";
}
SortDescriptionCollection sdc = listViewControl.Items.SortDescriptions;
ListSortDirection sortDirection = ListSortDirection.Ascending;
if (sdc.Count > 0)
{
SortDescription sd = sdc[0];
sortDirection = (ListSortDirection)((((int)sd.Direction) + 1) % 2);
sdc.Clear();
}
sdc.Add(new SortDescription(bindingProperty, sortDirection));
}
}
}
}
public class MyClass
{
public int SomeInteger { get; set; }
public string SomeString { get; set; }
public bool SomeBool { get; set; }
}
Xaml:
<Grid>
<ListView ItemsSource="{Binding}" x:Name="listViewControl" GridViewColumnHeader.Click="ListViewControl_Click">
<ListView.View>
<GridView AllowsColumnReorder="True">
<GridViewColumn Header="column1" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=SomeInteger}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="column2">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=SomeString}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="column3">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding SomeBool}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Category" Width="120">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding ElementName=mainWindow, Path=StringList}"
SelectedItem="{Binding Path=SomeString}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Grid>
Thanks.