我有一个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,但它不是我正在搜索的内容......
答案 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(...))
{
...
}
请注意,如果您要多次添加项目(例如,在用户输入时),这将变得更加棘手,因为您必须在适当的索引处手动插入项目。