SILVERLIGHT的LISTBOX数据排序
查了下资料,LISTBOX不带排序功能,所以要从数据源入手,自己实现一个List的Sort方法,主要就是那个icomparer接口的实现。
下面是测试代码,只是简单的对INT进行排序,把那篇文章的内容简化了。熟悉下最基本的实现。
1 <UserControl x:Class="SL.ListboxSort.MainPage" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 mc:Ignorable="d" 7 d:DesignHeight="300" d:DesignWidth="400"> 8 9 <Grid x:Name="LayoutRoot" Background="White"> 10 <ListBox Loaded="LB1_Loaded" x:Name="LB1" Height="300" HorizontalAlignment="Left" VerticalAlignment="Top" Width="130" Margin="120,0,0,0"> 11 <ListBox.ItemTemplate> 12 <DataTemplate> 13 <TextBlock Text="{Binding Name}" /> 14 </DataTemplate> 15 </ListBox.ItemTemplate> 16 </ListBox> 17 </Grid> 18 </UserControl>
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.ComponentModel; using System.Collections; using System.Reflection; namespace SL.ListboxSort { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private void LB1_Loaded(object sender, RoutedEventArgs e) { //初始化测试数据集 List<LBData> datalist = new List<LBData>(); datalist.Add(new LBData(Name="zhang1",20)); datalist.Add(new LBData(Name = "zhang2", 22)); datalist.Add(new LBData(Name = "zhang3", 23)); datalist.Add(new LBData(Name = "zhang4", 24)); datalist.Add(new LBData(Name = "zhang5", 25)); datalist.Add(new LBData(Name = "zhang6", 25)); datalist.Add(new LBData(Name = "zhang7", 1)); datalist.Add(new LBData(Name = "zhang8", 2)); //确定自己定义的排序规则 GComparer<LBData> gc = new GComparer<LBData>(); datalist.Sort(gc); //数据控件绑定 LB1.ItemsSource = datalist; } } #region 数据集 public class LBData:INotifyPropertyChanged { public LBData(string name, int rate) { Name = name; Rate = rate; } public string Name { get; set; } public int Rate { get; set; } #region impliment public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string propertyName) { PropertyChangedEventHandler handler = this.PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(propertyName)); } } #endregion } #endregion #region 自定义的一个LIST,因为测试只是最简单的实现,发现没必要用上这个,在资料文章里面这里还提供了升序还是降序排列的功能 public class Mylist<T> : List<T> { public void Sort() { GComparer<T> gc = new GComparer<T>(); base.Sort(gc); } } #endregion #region IComparer接口实现,用来自定义排序规则 public class GComparer<T> : IComparer<T> { public int Compare(T x, T y) { PropertyInfo property = typeof(T).GetProperty("Rate");//要包括程序集System.Reflection。Rate是用于在数据集LBDATA里面找到这个属性 int id1, id2; id1 = Convert.ToInt32(property.GetValue(x,null).ToString()); id2 = Convert.ToInt32(property.GetValue(y, null).ToString()); //最关键的其实就是这句,前面都是数据的转换 return id1.CompareTo(id2); } } #endregion
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?