如何实现字符串大小写不敏感排序唯一ObservableCollection?如何实现字符串不区分大小写排序唯一ObservableCollection
对于数据输入,用户可以为他们使用的字符串值创建贴纸。
该列表需要区分大小写且唯一并排序。
没有在SO上找到解决方案并实施了一个。
这可能对某人有价值。
而且可能会得到更好的答案。
如何实现字符串大小写不敏感排序唯一ObservableCollection?如何实现字符串不区分大小写排序唯一ObservableCollection
对于数据输入,用户可以为他们使用的字符串值创建贴纸。
该列表需要区分大小写且唯一并排序。
没有在SO上找到解决方案并实施了一个。
这可能对某人有价值。
而且可能会得到更好的答案。
这就是我想出了
using System.Collections.ObjectModel;
namespace OCstringUnique2
{
public partial class MainWindow : Window
{
private OCstringUniqueSorted myCol = new OCstringUniqueSorted();
public MainWindow()
{
myCol.Add("bb");
myCol.Add("aa");
myCol.Add("zz");
this.DataContext = this;
InitializeComponent();
}
public OCstringUniqueSorted MyCol { get { return myCol; } }
private void Button_Click(object sender, RoutedEventArgs e)
{
string s = tbNew.Text;
MyCol.Add(s);
}
}
public class OCstringUniqueSorted : ObservableCollection<string>
{
public new void Add(string item)
{
if (item == null) return;
item = item.Trim();
if (String.IsNullOrEmpty(item)) return;
if (this.Contains(item)) return;
if (this.Contains(item, StringComparer.CurrentCultureIgnoreCase)) return;
base.Add(item);
}
protected override void InsertItem(int index, string item)
{
int i = 0;
foreach(string s in this)
{
if(string.Compare(s,item,true) >= 0)
{
base.InsertItem(i, item);
return;
}
i++;
}
base.InsertItem(i, item);
}
}
}
<Grid>
<StackPanel Orientation="Vertical">
<TextBox Width="100" HorizontalAlignment="Left" x:Name="tbNew" />
<Button Content="Add" Click="Button_Click" Width="40" HorizontalAlignment="Left"/>
<ListBox ItemsSource="{Binding Path=MyCol}"/>
</StackPanel>
</Grid>
我不认为你应该排序您ObservableCollection
可言,这是不是它的目的是做反正...
在我认为你应该有你的ObservableCollection
的顶部,你的UI将用于绑定,并且可以非常容易地通过增加SortDescription s为单位排序的CollectionViewSource ...
private ICollectionView myCollectionView;
public ICollectionView MyCollectionView...
MyCollectionView.SortDescriptions.Add(new SortDescription(propertyName,
MyListSortDir));
这样你不必修改你的Collection,而是在它的顶部使用一个抽象层,你可以绑定到一个层,而不是绑定到实际的集合,并且你可以随心所欲地做任何事情(包括任何类型的排序),而不会影响潜在的收藏...
但是,这是一个集合,我只想使用独特和排序。为什么要分类每个回报CollectionViewSource可以执行唯一的吗? – Paparazzi
是的,你可以使用过滤器事件排除非独特的项目,我不认为它是在每次返回时排序,只是添加新项目... –
好的,但我不想排除非唯一来自演示的项目。我不想让非独特的时刻进入榜单。 – Paparazzi