gpt4 book ai didi

c# - 在 WPF 中使用 SortDescription 时出现问题 - int 和 string 不是 IComparable?

转载 作者:太空宇宙 更新时间:2023-11-03 14:24:58 24 4
gpt4 key购买 nike

我在使用 SortDescription 时遇到问题。我发现了一些关于这个问题的线索,比如如果你想按一个没有实现 IComparable 的类型排序,比如用户定义的类,但这不是我的情况。

我有一个类,它有两个属性:string ID 和 int Value。让我们称之为项目!我有一个观点:

<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>

EventHandlers 是这样的:

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
}

我得到 InvalidOperationException 因为它“无法比较数组中的两个元素。”,这是因为两个元素都没有实现 IComparable。那就是我无法理解的东西,因为我可以比较整数和字符串。

谢谢你的想法!

最佳答案

这对我来说很好,所以你在代码的其他部分做错了。比较您对以下示例所做的操作。

XAML:

<Window x:Class="SortDemo.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel>
<Button Click="OnSort" Content="Sort by ID" Tag="ID"/>
<Button Click="OnSort" Content="Sort by Value" Tag="Value"/>
<ItemsControl Name="_itemsControl" ItemsSource="{Binding Path=Items}" />
</StackPanel>
</Window>

代码隐藏:

using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows;

namespace SortDemo
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();

Items = new ObservableCollection<Item>();
Items.Add(new Item() { ID = "AAA", Value = 2 });
Items.Add(new Item() { ID = "BBB", Value = 1 });

DataContext = this;
}

public ObservableCollection<Item> Items { get; private set; }

private void OnSort(object sender, RoutedEventArgs e)
{
string sortProperty = (sender as FrameworkElement).Tag as string;
_itemsControl.Items.SortDescriptions.Clear();
_itemsControl.Items.SortDescriptions.Add(new SortDescription(sortProperty, ListSortDirection.Ascending));
}
}

public class Item
{
public string ID { get; set;}
public int Value { get; set; }

public override string ToString()
{
return ID + " " + Value;
}
}
}

关于c# - 在 WPF 中使用 SortDescription 时出现问题 - int 和 string 不是 IComparable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4337584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com