无法访问telerik:RadComboBox中的Sort属性

时间:2015-10-14 10:56:37

标签: c# wpf xaml combobox telerik

我有一个Telerik ComboBox:

<telerik:RadComboBox  Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" IsReadOnly="True" SelectedIndex="0" x:Name="CbBoxUltra" SelectionChanged="CbBoxUltra_SelectionChanged" MinWidth="100"/>

我为每个&#34;做了一次&#34;循环将项目存储到其中:

foreach (var ultra in line2)
{
...
    if (deviceType != null && !String.IsNullOrEmpty(vehicleName) && vehicleName != "null" && deviceType == "ultra")
    {
        _listUltra.Add(new UltraModel { Id = Convert.ToInt32(idUltra), Name = nameUltra, NameVehicle = vehicleName });
        CbBoxUltra.Items.Add(vehicleName);
    }
}

我想对我的ComboBox中的项目进行排序(例如,从a到z)。 所以我试着去做文档中的内容:Telerik's sorting

但是在.xaml中,我无法访问该属性&#34;排序&#34;,就像我使用&#34; VerticalAlignment&#34;例如,我无法访问.xaml.cs中的属性:

CbBoxUltra.Items.Sort(); //It doesn't match anything here

我可以访问.SortDescription,但它不是我正在搜索的内容......

1 个答案:

答案 0 :(得分:4)

根据我从Telerik的文档中收集的内容,Sort属性仅适用于ASP.NET RadComboBox Control(服务器端),而不适用于WPF RadComboBox Control

这一点,有两种最常见的方法可以继续。

<强>予。利用现有的WPF实施

RadComboBox.Items属性实际上是从ItemsControl继承的。它的类型为ItemCollection,它实现ICollectionView,并支持通过SortDescriptions集合进行排序。因此,如果要按属性值排序,只需向该集合添加适当的项:

CbBoxUltra.Items.SortDescriptions.Add(new SortDescription
{
    PropertyName = "XXX",
    Direction = ListSortDirection.Descending
});
CbBoxUltra.Items.SortDescriptions.Add(new SortDescription
{
    PropertyName = "YYY",
    Direction = ListSortDirection.Ascending
});

此代码将导致项目首先按XXX属性按降序排序,然后按YYY属性按升序排序。但是,如果您的排序逻辑不仅需要引用项属性值,那么您可以添加单个排序描述,而忽略PropertyName

CbBoxUltra.Items.SortDescriptions.Add(new SortDescription
{
    Direction = ListSortDirection.Descending
});

这将导致排序机制使用项类型的默认比较器进行排序。要应用自定义逻辑,请确保您的项目实现IComparable<T>界面。 string的Ddefault比较器按词汇顺序排序。

<强> II。在添加

之前对项目进行预排序

如果您只添加一次项目,这种方法会更容易一些。这里的代码摘录:

foreach (var ultra in line2.OrderByDescending(...))
{
    ...
}

请注意,如果您要多次添加项目(例如,在用户输入时),这将变得更加棘手,因为您必须在适当的索引处手动插入项目。