Как мне обновить представление Datagrid с двумя списками?

У меня есть два списка:

public List<Line> UnfilteredList {get; private set;}
public List<Line> FilteredList {get {
                      return this.UnfilteredList.Where(x=> x.IsItem);
      }
}

У меня есть привязка сетки к отфильтрованному списку. Это показывает список отфильтрованных элементов. Однако, когда я добавляю элемент в UnfilteredList, он не отображается в сетке, поскольку предполагается, что привязка данных не обновляется.

Каковы возможные решения этой проблемы и как уведомить представление DataGrid о повторной привязке к списку после изменения/добавления/удаления элемента из списка UnfilteredList?

Список связан с использованием

this.dgvMain.DataSource =new BindingList<Line>(FilteredList);

person SamIAm    schedule 14.08.2015    source источник
comment
Перепривяжите свое представление сетки данных, используя следующие методы: c Sharp DataGridView после обновления"> stackoverflow.com/questions/7008361/   -  person Fidel    schedule 14.08.2015


Ответы (1)


Вам необходимо выполнить повторную привязку на основе двух сценариев:

Новый список создается и когда элементы добавляются/удаляются. Из-за этого я бы рекомендовал использовать ObservableColleciton для наблюдения за добавлением/удалением элементов, а затем вы можете принудительно выполнить повторную привязку всякий раз, когда это происходит.

private ObservableCollection<Line> _unfilteredList;
public ObservableCollection<Line> UnfilteredList 
{
    get { return _unfilteredList; }
    private set
    {
        _unfilteredList = value;
        UpdateList();
    }
}

private List<Line> _filteredList; 
public List<Line> FilteredList 
{
    get 
    {
        return _filteredList;
    }
    private set
    {
        _filteredList = value;
        RaisePropertyChanged();
    }
}

private void UpdateList()
{
    if (UnfilteredList != null)
    {
        FilteredList = null;
        FilteredList = UnfilteredList.Where(x=> x.IsItem).ToList();
    }
}

Затем вы можете вызывать UpdateList при добавлении/удалении элементов.

// subscribe
UnfilteredList += OnCollectionChanged;

private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    if ((e.NewItems != null) || (e.OldItems != null))
    {
        UpdateList();
    }
}
person d.moncada    schedule 14.08.2015