Синхронизация источника и списка выбранных элементов - PullRequest
0 голосов
/ 12 июля 2011

У меня есть комбинированный список, который связан с ObservableCollection<Item> во ViewModel.Когда пользователь добавляет новый элемент, я не знаю, добавил ли он элемент в связанную коллекцию, поэтому я делаю обновление.Ну, это устанавливает selecteditem в null, поэтому я реализовал некоторый код, чтобы запомнить выбранный элемент и установить его после обновления Коллекции.Проблема в том, что коллекция не отображает выбранный элемент.

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);
}

Как получить в коллекции отображение исправленного элемента?

Редактировать: Коллекция представляеттаблица в бэкэнд БД.Пользователь может открыть новое окно для добавления элементов в БД.Когда окно закрыто, я должен обновить коллекцию, чтобы получить новые элементы.Извините за путаницу в моей формулировке.

Ответы [ 3 ]

1 голос
/ 12 июля 2011

Можете ли вы не просто получить новую коллекцию, а затем обновить существующую, добавив пропущенные значения (кроме расширения linq?)

0 голосов
/ 12 июля 2011

Я предполагаю, что этот код находится в контексте обработчика событий Button Click? Поэтому я не уверен, почему вы каждый раз реинициализируете коллекцию. Вы должны иметь возможность просто использовать метод Brands.Add. У меня на рабочем месте нет .net 3.5, поэтому мне просто нужно написать код psuedo.

Я не знаю, ищите ли вы это, но, возможно, это может помочь.

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;
          }
     }
}
}
0 голосов
/ 12 июля 2011

Вы устанавливаете SelectedBrand для элемента в _dataContext.Brands, которого нет в Brands ObservableCollection.

Измените свой код, чтобы установить SelectedBrand для элемента в вашем ObservableCollection, а не в _dataContext.

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