1

私の質問は次のとおりです。クエリ完了イベントはありますか???

データベースからいくつかのデータを照会して WPF アプリケーションに表示するために、エンティティ フレームワークを使用しています。私の問題は、エンティティ フレームワークがデータベース サーバーから結果を受け取る前にレンダリングが終了するため、UI のデータ リストが空のままになることです。対照的に、デバッグ モードに入り、データの一覧表示に移る前に少し待つと、クエリが終了し、データが一覧表示されます。

この問題にどのようにアプローチすればよいですか??

編集: ここに私のコードがあります:

public class DatabaseModel : DbContext, INotifyPropertyChanged
    {
        public ObservableCollection<Employee> observableCollection;
        public event PropertyChangedEventHandler PropertyChanged;

        public DbSet<Employee> Employees { get; set; }
        public ObservableCollection<Employee> ObservableEmployees
        {
            get
            {
                return observableCollection;
            }
            set
            {
                observableCollection = value;
                OnPropertyChanged("ObservableEmployees");
            }
        }

        public DatabaseModel()
        {
            ObservableEmployees = Employees.Local;
        }

        // Create the OnPropertyChanged method to raise the event 
        protected void OnPropertyChanged(string name)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(name));
            }
        }
    }

そして、WPF を介して My DataBinding を使用する方法: App.Xaml で、このクラスのインスタンスを定義します...

<Application.Resources>
        <local_database:DatabaseModel x:Key="DatabaseInstance"/>
</Application.Resources>

Mainwindow.XAML のデータを使用する

<ListBox ItemsSource="{Binding Source={StaticResource DatabaseInstance}, Path=ObservableEmployees, NotifyOnSourceUpdated=True}" 
                             DisplayMemberPath="Name"
                             Binding.SourceUpdated="ListBox_SourceUpdated">
                    </ListBox>
4

1 に答える 1

1

ソースには 2 つの問題があります。

  1. を使用Employees.Localしていますが、従業員をロードするコードが見当たりません。
  2. から派生したビュー モデルDbContextは、ビュー モデルの目的である関心の分離を無効にします。ビュー モデルは、データ レイヤー アクティビティに関与しないでください。コントローラー/プレゼンター レイヤーは、データ レイヤーを使用して作成する必要があります。つまりDatabaseModel、POCO クラスとして作成Employeesし、データ層からのコレクションを入力します。次に、UI がレンダリングを開始する前にビュー モデルに値が設定され、クエリが完了するまで待つための複雑な配線は必要ありません。
于 2012-10-25T14:16:56.453 に答える