2015-08-14 15 views
0

我有两个列表:如何使用两个列表刷新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); 
+0

使用这些技术重新绑定您的数据的GridView:http://stackoverflow.com/questions/7008361/how-can-i -refresh-C锋利的datagridview-后更新 – Fidel

回答

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