如何在添加项目后更新组合框

时间:2011-12-22 21:45:52

标签: wpf combobox

我有一个带有查找项的组合框的WPF应用程序。组合框中填充了一个在我的ViewModel中创建的ObservableCollection属性。

用户可以弹出窗口以输入新的查找值。用户输入新值后,我将值写入SQL Server中的查找表。这部分效果很好。

问题是,我希望组合框列表能够正确更新和排序。这样做的最佳方式是什么?

如果我这样做,myLookupProperty.Add(newitem),我的组合框会更新,但它的顺序不正确。

如果我这样做,myLookupProperty = new ObservableCollection(Context.GetLookupTypes()),那么在我点击组合框然后再返回组合框之前,组合框不会更新。

什么是将新输入的项目放入表格并让组合框获得这些更改并正确排序的最佳方法?

3 个答案:

答案 0 :(得分:2)

具有默认排序描述的CollectionView应该适用于您的情况。当发生Add \ Remove \ Update(ofcourse ObservableCollection)时,它们与INotifyPropertyChanged的效果非常好。

答案 1 :(得分:1)

你可以做到

var sortedItems = myLookupProperty.Items.OrderBy(x => x.WhateverPropertyYouWantToSortOn);
myLookupProperty.Clear();
foreach (var item in sortedItems) {
  myLookupProperty.Add(item);
}

这对你有用。您尝试的第一种方法不起作用的原因(正如我想象的那样)是它只是将新项目附加到底部。您提出的第二种方法不起作用的原因是您在替换UI绑定的ObservableCollection实例时中断了绑定。在此之后,它将无法正确地传达内容的更改!

作为旁注,似乎this exact question was asked here!

答案 2 :(得分:1)

您可以在特定索引处插入。

    public void Insert ( int index, T item )

我怀疑在从SQL构建时启动时,select语句具有顺序,因此它以正确的顺序构建。

您也可以使用CollectionViewSource进行排序,但我认为插入适当的索引会更容易。