WPF CollectionViewSource.GetDefaultView ICollectionViewLiveShaping IsLiveSorting

复制代码
<Window x:Class="WpfApp147.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp147"
        mc:Ignorable="d" WindowState="Maximized"
        Title="MainWindow" Height="450" Width="800"> 
    <Grid>
        <ListBox x:Name="lbx"  ItemsSource="{Binding}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Border Margin="2" Padding="4" BorderThickness="3" BorderBrush="Blue">
                        <StackPanel Orientation="Horizontal" TextBlock.FontSize="20">
                            <TextBlock Foreground="Blue" FontWeight="Bold"
                                       Text="{Binding Name,StringFormat='Name:{0}'}"/>
                            <TextBlock Foreground="Red" Margin="10,0,0,0" FontSize="20"
                                       Text="{Binding Value,StringFormat='Value:{0}'}"/> 
                        </StackPanel>
                    </Border>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>

//cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Diagnostics;
using System.ComponentModel;
using System.Collections.ObjectModel;

namespace WpfApp147
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    { 
        ObservableCollection<StockItem> _items;
        public MainWindow()
        {
            InitializeComponent();
            InitItems();
            var view = CollectionViewSource.GetDefaultView(_items);
            view.SortDescriptions.Add(new SortDescription(
                "Value", ListSortDirection.Ascending));
            var listView = (ICollectionViewLiveShaping)CollectionViewSource.GetDefaultView(_items);
            listView.IsLiveSorting = true;
            this.DataContext= view;
        }

        private void InitItems()
        {
            _items = new ObservableCollection<StockItem>();
            Random rnd = new Random();
            for (int i = 0; i < 100; i++)
            {
                _items.Add(new StockItem()
                {
                    Name = $"Name_{i + 1}",
                    Value = rnd.Next(1, 1000000)
                });
            }
        }
    }

    class StockItem : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged = delegate { };
        public string Name { get; set; }
        double _value;
        public double Value
        {
            get
            {
                return _value;
            }
            set
            {
                _value = value;
                PropertyChanged(this, new PropertyChangedEventArgs("Value"));
            }
        }
    }
}
复制代码

 

 

 

 

 

 

posted @   FredGrit  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2022-06-08 C list diretory and files recursively
2020-06-08 C# FileSystemWatcher
2020-06-08 Access Volumn via extern and invoke win 32 dll
2020-06-08 Change file readonly property File.SetAttribute and new FileInfo readonly property
2020-06-08 C# zip folder
2020-06-08 GZipStream Compress And Decompress
2020-06-08 C# list top 20 biggest files via given path
点击右上角即可分享
微信分享提示