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

S. *_*aux 2 c# wpf xaml combobox telerik

我有一个Telerik组合框:

<telerik:RadComboBox  Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" IsReadOnly="True" SelectedIndex="0" x:Name="CbBoxUltra" SelectionChanged="CbBoxUltra_SelectionChanged" MinWidth="100"/>
Run Code Online (Sandbox Code Playgroud)

我正在做一个“ for each”循环,将项目存储到其中:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

但是在.xaml中,我无法访问属性“ Sort”,例如我对“ VerticalAlignment”进行访问,并且我也无法访问.xaml.cs中的属性:

CbBoxUltra.Items.Sort(); //It doesn't match anything here
Run Code Online (Sandbox Code Playgroud)

我可以访问.SortDescription,但这不是我要搜索的内容...

Grx*_*x70 5

从我从Telerik的文档中收集的信息来看,该Sort属性仅适用于ASP.NET RadComboBox Control(服务器端),而不适用于WPF RadComboBox Control

鉴于此,有两种最常见的处理方式。

I.利用现有的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
});
Run Code Online (Sandbox Code Playgroud)

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

CbBoxUltra.Items.SortDescriptions.Add(new SortDescription
{
    Direction = ListSortDirection.Descending
});
Run Code Online (Sandbox Code Playgroud)

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

二。在添加之前对项目进行预排序

如果您仅添加一次项目,则此方法会更容易一些。这是代码摘录:

foreach (var ultra in line2.OrderByDescending(...))
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

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