0

DataGrid現在、LINQ to Entity クエリから取得したリストを表示するWPFがあります。ただし、データベースから何かを削除した場合、DataGrid. を試してみmyGrid.Items.Refresh()ましたが、1 つのセルしか更新されませんでした。

どうにかして問題を解決できることはわかってObservableCollectionいますが、データベースを作成/追加/変更するたびにコレクションも変更されるように、そのようなコレクションと適切なメソッドを作成する場所がわかりません。

4

2 に答える 2

1

DataGrid には、クエリが実行された時点からのデータがあります。
新しいデータが必要な場合は、クエリを再実行する必要があります。

SQL Server でのクエリ通知

MSSQL を使用していない場合はお知らせください。回答を削除します。

于 2012-11-10T14:06:39.203 に答える
0

コードを介して DataGrid を操作する必要はありません。代わりに、DataGrid の ItemsSource を ObservableCollection にバインドし、コレクションを操作します。DataGrid は自動的に更新されます。

ここを見てください:新しい値を割り当てた後、ObservableCollection を DataGrid にバインドする

実際、多くの場合 (私の場合は 95% の確率で)、WPF コントロールに名前を付けたくないことがわかります。コードが UI を認識していない場合、長期的には保守が容易になります。データ バインディングを介して UI に情報を取得する場所を知らせます。そして、INotifyPropertyChanged または Dependency Properties、および DataContext を見てください。

<DataGrid ItemsSource="{Binding MyCollection}" />


public MainWindow()
    {
        InitializeComponent();
        DataContext = this;
    }

    ObservableCollection<object> myCollection = new ObservableCollection<object>();
    public ObservableCollection<object> MyCollection
    {
    get
    {
        return myCollection;
    }
    set
    {
        myCollection = value;
        // Call the Notification here. Using linq and reflection you could get it to look like this:
        // NotifyPropertyChanged(() => MyCollection);
    }
}

myCollection 値を実際に変更しない場合は、変更通知を提供する必要はありません。ObservableCollection は、コレクションを変更すると、実際には独自の変更を提供します。

于 2012-11-10T14:13:26.617 に答える