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 @ 2024-06-08 22:06  FredGrit  阅读(8)  评论(0编辑  收藏  举报