これは私が立ち往生しているのではなく、もっと良い方法があるかどうかという疑問です。それはそのままでは機能しますが、できるかぎりもっと理解したいと思います。ComboBoxの変更時にObservableCollectionを変更する
バインドにObservableCollection<T>
を使用しているときに、いつもDataGrid.ItemSource
を更新する必要がありますか?
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));
}
}
}
私はその後、ObservableCollection<T>
を更新するために、ComboBox
変更イベントを使用します。 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