C# 使用可观测集合在silverlight中对数据网格进行排序

C# 使用可观测集合在silverlight中对数据网格进行排序,c#,silverlight-5.0,C#,Silverlight 5.0,我有一个可观察的集合绑定到datagrid。。。我想通过单击标题对datagrid进行排序。这是一个动态数据。这是我的密码 namespace SLSortObservableCollection { public partial class MainPage : UserControl { //ObservableCollection<int> NumData = new ObservableCollection<int>();

我有一个可观察的集合绑定到datagrid。。。我想通过单击标题对datagrid进行排序。这是一个动态数据。这是我的密码

namespace SLSortObservableCollection
{
    public partial class MainPage : UserControl
    {
        //ObservableCollection<int> NumData = new ObservableCollection<int>();
       // ObservableCollection<string> StrData = new ObservableCollection<string>();

    public MainPage()
    {
        InitializeComponent();

       ObservableCollection<int> NumData = new ObservableCollection<int>();
    ObservableCollection<string> StrData = new ObservableCollection<string>();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        Random ra = new Random();
        for (int i = 0; i < 10; i++)
        {
            int num = ra.Next(1000);
            NumData.Add(num);

        }
        try
        {

            dataGrid1.ItemsSource = null;
            dataGrid1.ItemsSource = NumData;
        }
        catch (Exception ex) { MessageBox.Show(ex.ToString()); }
    }

    private void button2_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            StringBuilder builder = new StringBuilder();
            Random random = new Random();
            char ch;
            for (int i = 0; i < 5; i++)
            {
                ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
                builder.Append(ch);
                StrData.Add(builder.ToString());
            }

            dataGrid1.ItemsSource = StrData;
        }
        catch (Exception ex) { MessageBox.Show(ex.ToString()); }
    }

}  

}
命名空间SLSortoServableCollection
{
公共部分类主页面:UserControl
{
//ObservableCollection NumData=新的ObservableCollection();
//ObservableCollection StrData=新的ObservableCollection();
公共主页()
{
初始化组件();
ObservableCollection NumData=新的ObservableCollection();
ObservableCollection StrData=新的ObservableCollection();
}
私有无效按钮1\u单击(对象发送者,路由目标)
{
随机ra=新随机();
对于(int i=0;i<10;i++)
{
int num=ra.Next(1000);
NumData.Add(num);
}
尝试
{
dataGrid1.ItemsSource=null;
dataGrid1.ItemsSource=NumData;
}
catch(Exception ex){MessageBox.Show(ex.ToString());}
}
私有无效按钮2\u单击(对象发送者,路由目标)
{
尝试
{
StringBuilder=新的StringBuilder();
随机=新随机();
char ch;
对于(int i=0;i<5;i++)
{
ch=Convert.ToChar(Convert.ToInt32(Math.Floor(26*random.NextDouble()+65));
附加(ch);
添加(builder.ToString());
}
dataGrid1.ItemsSource=StrData;
}
catch(Exception ex){MessageBox.Show(ex.ToString());}
}
}  
}

ObservableCollection根本不支持排序。如果这不是silverlight,您可能可以使用CollectionView做一些事情

实际上,您可能必须使用SortableCollection的自定义扩展。有几架这样的飞机四处飞行,只需搜索“可排序的可观测集合”

一些帮助您入门的实现


任何人都可以帮助我…我想通过单击标题对列进行排序…我们可以使用类似columnheader\u Click Event的方法,然后在该事件中调用排序函数…这里的重要部分是,我必须通过单击列标题对列进行排序…Silverlight5 datagrid没有“ColumnHeaderClik”即使自定义ObservableCollection实现了IComparable,它也应该像处理普通列表一样工作。无需添加任何单击事件。(我自己没有测试过)