Combobox itemssource和selecteditem同步

时间:2011-07-12 13:31:54

标签: c# mvvm observablecollection

我有一个在ViewModel中绑定到ObservableCollection<Item>的组合框。当用户添加新项目时,我不知道他们是否已将项目添加到绑定集合中,因此我进行了刷新。好吧,这会将selecteditem设置为null,因此我实现了一些代码来记住所选项目并在续订Collection之后设置它。问题是集合不显示选定项目。

if (_selectedBrand != null)
{
    int selectedBrandID = _selectedBrand.BrandID;
    Brands = null;
    Brands = new ObservableCollection<Brand>(_dataContext.Brands.ToList());
    SelectedBrand = _dataContext.Brands.First<Brand>(b => b.BrandID == selectedBrandID);
}

如何让集合显示更正的项目?

编辑:该集合代表后端数据库中的一个表。用户可以打开一个新窗口以将项目添加到DB。窗口关闭后,我必须刷新集合以获取任何新项目。很抱歉我的措辞混乱。

3 个答案:

答案 0 :(得分:1)

你能不能只检索新的集合,然后更新现有的一个添加缺失值(使用linq扩展名除外?)

答案 1 :(得分:0)

您正在将SelectedBrand设置为_dataContext.Brands中的Brands ObservableCollection中不存在的项目。

更改代码,将SelectedBrand设置为ObservableCollection中的项目,而不是_dataContext

SelectedBrand = Brands.First<Brand>(b => b.BrandID == selectedBrandID);

答案 2 :(得分:0)

我假设此代码位于Button Click事件处理程序的上下文中?所以我不确定你为什么每次都要重新初始化这个系列。您应该可以使用Brands.Add方法。我的工作场所没有.net 3.5,所以我只需要伪造一下它。

我不知道这是否是您正在寻找的东西,但也许它可以提供帮助。

public sealed partial class ObservableCollectionExample : Form
{

private ObservableCollectionExample()
{
     InitializeComponent();
}

private ObservableCollectionExample_Load(object sender, EventArgs e)
{
      //Subscribe to the collection changed event
      Brands.CollectionChanged += new EventArgs<NotifyCollectionChangedEventHandler>(Brands_Changed);
}

private Brands_Changed(object sender, EventArgs e)
{
      //Add code to do something when the Brands collection is changed i.e. something is added or removed via the .Add or .Remove method
}

private void Button_Click(object sender, EventArgs e)
{
     if (_selectedBrand != null)
     {
          Brands.Add(foobar);
          if (_dataContext.Brands.First<Brand>(b => b.BrandID == selectedBrandID)) // Do some checking to see if it got added to the collection
          {
          SelectedBrand = _selectedBrand.BrandId;
          }
     }
}
}