這不是一個我堅持的問題,而是一個問題,以確定是否有更好的方法。它的工作原理如下,但我希望能夠更好地理解。組合框更改後更改ObservableCollection
爲什麼我總是必須更新DataGrid.ItemSource
當我使用ObservableCollection<T>
進行綁定?
我使用以下代碼將ObservableCollection<T>
與DataGrid
綁定。
public partial class MainWindow : INotifyPropertyChanged
{
public MainWindow()
{
DataContext = this;
InitializeComponent();
CalcObservable =
DatabaseQueries.ShiftInputSourceObserv(SelectedEmployee.Key, DateFilter);
MyDataGrid.ItemsSource = CalcObservable;
}
public ObservableCollection<CalcTable> CalcObservable { get; set; }
= new ObservableCollection<CalcTable>();
}
這是從數據庫中獲取數據的功能,
internal class DatabaseQueries
{
public static ObservableCollection<CalcTable> ShiftInputSourceObserv(int staffNo, DateTime date)
{
using (DatabaseDataContext dataContext = new DatabaseDataContext(MainWindow.InstanceConnectionString))
{
return new ObservableCollection<CalcTable>
(dataContext.CalcTables.Where(
p => p.Staff_No == staffNo &&
p.Year_No == date.Year &&
p.Month_No == date.Month)
.OrderBy(p => p.Column_Index));
}
}
}
然後我用一個ComboBox
改變事件來更新ObservableCollection<T>
。 SelectedEmployee.Key
綁定到ComboBox
和改變被選擇後,所選擇的員工:
private void NumbersComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
CalcObservable =
DatabaseQueries.ShiftInputSourceObserv(SelectedEmployee.Key, DateFilter);
MyDataGrid.ItemsSource = CalcObservable;
}
我的印象是,改變ObservableCollection<T>
將更新,而無需再次使用MyDataGrid.ItemsSource = CalcObservable;
線下?
感謝您的幫助。
這不是一個新的實例嗎? – Ron
而不是在'NumbersComboBox_SelectionChanged'中分配'CalcObservable',嘗試清除已有的集合,並將'DatabaseQueries.ShiftInputSourceObserv'的返回值中的項添加到現有集合(即'CalcObservable') –
'ObservableCollection'將通知UI添加/刪除項目。但你正在做的是創建一個新實例 – Pikoh