gpt4 book ai didi

wpf - 纯粹在 XAML 中对组合框进行排序

转载 作者:行者123 更新时间:2023-12-03 11:01:56 25 4
gpt4 key购买 nike

我很惊讶在此之前没有人问过这个问题......好吧,至少我在这里或其他任何地方都没有找到答案,实际上。

我有一个数据绑定(bind)到 ObservableCollection 的 ComboBox。一切都很好,直到人们想要对内容进行分类。没问题——我最终改变了简单的属性:

public ObservableCollection<string> CandyNames { get; set; } // instantiated in constructor

对于这样的事情:
private ObservableCollection<string> _candy_names; // instantiated in constructor
public ObservableCollection<string> CandyNames
{
get {
_candy_names = new ObservableCollection<string>(_candy_names.OrderBy( i => i));
return _candy_names;
}
set {
_candy_names = value;
}
}

这篇文章真的是两个问题合二为一:
  • 如何在 XAML 中对简单的字符串组合框进行排序 仅限 .我对此进行了研究,只能找到有关 SortDescription 类和 this is the closest implementation I could find 的信息,但它不是用于组合框。
  • 一旦我在代码隐藏中实现了排序,我的数据绑定(bind)就被破坏了;当我向 ObservableCollection 添加新项目时,ComboBox 项目没有更新!我不明白这是怎么发生的,因为我没有为我的 ComboBox 分配名称并直接操作它,这通常会破坏绑定(bind)。

  • 谢谢你的帮助!

    最佳答案

    您可以使用 CollectionViewSource 在 XAML 中进行排序,但是如果基础集合发生更改,则需要刷新它的 View 。

    XAML:

    <Window x:Class="CBSortTest.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
    Height="300" Width="300">

    <Window.Resources>
    <CollectionViewSource Source="{Binding Path=CandyNames}" x:Key="cvs">
    <CollectionViewSource.SortDescriptions>
    <scm:SortDescription />
    </CollectionViewSource.SortDescriptions>
    </CollectionViewSource>

    </Window.Resources>
    <StackPanel>
    <ComboBox ItemsSource="{Binding Source={StaticResource cvs}}" />
    <Button Content="Add" Click="OnAdd" />
    </StackPanel>
    </Window>

    后面的代码:
    using System;
    using System.Collections.ObjectModel;
    using System.Windows;
    using System.Windows.Data;

    namespace CBSortTest
    {
    public partial class Window1 : Window
    {
    public Window1()
    {
    InitializeComponent();

    CandyNames = new ObservableCollection<string>();

    OnAdd(this, null);
    OnAdd(this, null);
    OnAdd(this, null);
    OnAdd(this, null);

    DataContext = this;

    CandyNames.CollectionChanged +=
    (sender, e) =>
    {
    CollectionViewSource viewSource =
    FindResource("cvs") as CollectionViewSource;
    viewSource.View.Refresh();
    };
    }

    public ObservableCollection<string> CandyNames { get; set; }

    private void OnAdd(object sender, RoutedEventArgs e)
    {
    CandyNames.Add("Candy " + _random.Next(100));
    }

    private Random _random = new Random();
    }
    }

    关于wpf - 纯粹在 XAML 中对组合框进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2274690/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com