我有一个在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。窗口关闭后,我必须刷新集合以获取任何新项目。很抱歉我的措辞混乱。
答案 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;
}
}
}
}