CollectionViewSource DataGrid Sortieren

11/08/2010 - 18:55 von Felix Liebrecht | Report spam
Hallo NG,

tauscht man die Source in einer CollectionViewSource aus, geht
die in der CVS definierte Sortierung verloren, wenn man ein
DataGrid zu Darstellung benutzt. Sie bleibt jedoch erhalten
bei Darstelllung in einem ItemsControl.
Ich wollte fragen, ob das kalte Kaffee ist und falls ja, warum
dem so ist.

Hier ein Codefragment, mit dem man es sehen kann:

In XAML für die Version 'DataGrid':

<Window x:Class="CollectionViewSourceDataGrid.WndDataGrid"

xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
Title="WndItemsControl" Height="200" Width="300">
<Window.Resources>
<CollectionViewSource x:Key="CVS" >
<CollectionViewSource.SortDescriptions>
<scm:SortDescription Direction="Ascending"
PropertyName="Color"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Window.Resources>

<StackPanel>
<Button Content="Neu" Click="Button_Click" />
<DataGrid ItemsSource="{Binding Source={StaticResource CVS}}"
Margin="10"/>
</StackPanel>
</Window>

In der CodeBehind-Datei:

public partial class WndDataGrid : Window
{
Auto[] autos = new Auto[2];
public WndDataGrid ()
{
InitializeComponent();
autos[0] = new Auto( "rot" );
autos[1] = new Auto( "gelb" );
CollectionViewSource cvs = this.FindResource( "CVS" ) as
CollectionViewSource;
cvs.Source = autos;
}

private void Button_Click (object sender, RoutedEventArgs e)
{
CollectionViewSource cvs = this.FindResource( "CVS" ) as
CollectionViewSource;
cvs.Source = null;
cvs.Source = autos;
}
}

public class Auto
{
public Auto (string color)
{ this.Color = color; }
public string Color { get; set; }
}

Klickt man einmal auf den Button geht die anfàngliche Sortierung
verloren.

Die ItemsControl-Vsion habe ich so realisiet (Codebehind-Datei
unveràndert):

<StackPanel>
<Button Content="Neu" Click="Button_Click" />
<ItemsControl ItemsSource="{Binding Source={StaticResource
CVS}}" Margin="10">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Color}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>

Jetzt bleibt die Sortierung beim Klicken erhalten.

Gruß
Felix
 

Lesen sie die antworten

#1 Felix Liebrecht
12/08/2010 - 20:41 | Warnen spam
Hallo NG,

ich habe jetzt erst gemerkt, dass die Newsgroup nicht mehr
làuft, und habe daher den Beitrag in das WPF-Forum ein-
gestellt.

Felix

Ähnliche fragen