Ich habe ein Problem mit der Verwendung von SortDescription. Ich habe einen Thread zu dem Problem gefunden, etwa wenn Sie nach einem Typ sortieren möchten, der IComparable nicht implementiert, wie eine benutzerdefinierte Klasse, aber das ist nicht mein Fall.Problem bei der Verwendung von SortDescription in WPF - int und string sind nicht IComparable?
Ich habe eine Klasse, die zwei Eigenschaften hat: String-ID und int-Wert. Nennen wir es Item! Und ich habe einen Blick:
<UserControl> <!-- ... -->
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Button Click="Button_Click"
Content="Sort by ID"
Grid.Row="0"/>
<Button Click="Button_Click1"
Content="Sort by Value"
Grid.Row="1"/>
<DockPanel Grid.Row="2">
<ItemsControl x:Name="mItemsControl"
ItemsSource="{Binding Items}"><!-- The type of Items is ObservableCollection<Item> -->
<!-- ... -->
</ItemsControl>
</DockPanel>
</Grid>
</GroupBox>
Eventhandler wie diese sind: „Fehlgeschlagen zwei Elemente im Array vergleichen“
private void Button_Click(object sender, RoutedEventArgs e)
{
mItemsControl.Items.SortDescriptions.Add(new SortDescription("ID", ListSortDirection.Ascending); //Exception here
}
private void Button_Click1(object sender, RoutedEventArgs e)
{
mItemsControl.Items.SortDescriptions.Add(new SortDescription("Value", ListSortDirection.Ascending); //...and here as well
}
ich InvalidOperationException bekommen, weil es, und es ist, weil weder von Die Elemente implementieren IComparable. Und das ist, was ich nicht verstehen kann, wie ich Intarsien, sowie Strings vergleichen kann.
Vielen Dank für eine Idee!
Ich bin ein Lügner. Ich war zu ungenau mit meinem Beispiel. mItemsControl.Items.SortDescriptions.Add (this.IDDescending); war, dass ich verwendet habe, wo IDAscending Getter eine neue SortDescription ("ID", ListSortDirection.Descending) erstellt, aber wie ich herausgefunden habe, war der Wert, der auf diese Weise erhalten wurde, eine Art von Standard-Sortierbeschreibung. Die Richtung war aufsteigend und PropertyName war null. (Ich habe diese Lösung verwendet, um genaue Sortierbeschreibungen hinzufügen und entfernen zu können.) Ich weiß nicht warum, aber das sollte die Antwort sein. – ike