Temat: WPF, MVVM i EF - Databinding problem

Witam!
Próbuję napisać prostą aplikację przy użyciu MVVM i EF, jednak nie mam pojęcia, jak mógłbym zbindować DataGrid'a tak, aby rekordy wskakiwały mi "na żywo". Kod aplikacji (zip - projekt Visual Studio 2012):
http://sdrv.ms/PMiAIQ
Jako, że jeszcze raczkuję, będe wdzięczny za wszelkie sugestie i uwagi. Z góry dziękuję za udzieloną pomoc.

Temat: WPF, MVVM i EF - Databinding problem

Należy wykorzystać mechanizm DataBinding i klasę ObservableCollection. W razie potrzeby przekazywania zmian we właściwościach rekordów (np.: user edytował cenę i chcesz ją automatycznie zachować) należy skorzystać z interfejsu INotifyPropertyChanged. Zachęcam do zapoznania się z materiałami na MSDN gdzie cały mechanizm jest dość dobrze opisany.

Temat: WPF, MVVM i EF - Databinding problem

Kombinowałem z ObservableCollection, problemem jest to, że Entity Framework może mi zwrócić rekordy jako listę, lub tablicę, a utworzenie z tego ObservableCollection niestety nic mi nie daje.
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: WPF, MVVM i EF - Databinding problem

Ale co masz na myśli, że nic nie daje? ObservableCollection załatwia sprawę przy dodawaniu i usuwaniu elementów. Jeśli chodzi o zmiany atrybutów, to jak jak napisał Piotr, musisz zaimplementować interfejs INotifyPropertyChanged.
Andrzej Szymczak

Andrzej Szymczak Student, Poznańska
Wyższa Szkoła
Biznesu i Języków
Obcych

Temat: WPF, MVVM i EF - Databinding problem

Dane z EF po prostu "opakowujesz" w ObservableCollection, najlepiej w kolekcję dziedziczoną po ObservableCollection i wtedy masz łatwy dostęp do odpowiedniego eventa, gdzie łatwo sprawdzisz co zostało dodane, zmienione, usunięte i wykonasz odpowiednie kroki, choć ja to tak obudowuję, że jest automatycznie.

Robię ObjectSet z wybranych danych, a potem tylko łapie zmiany i w zależności jaka to zmiana wykonują się odpowiednie metody.

konto usunięte

Temat: WPF, MVVM i EF - Databinding problem

Aby poprawnie korzystać z powiadamiania widoku o zmianie danych za pomocą INotifyPropertyChanged musisz w kodzie XAML wywołać właściwość UpdateSourceTrigger np.
<DataGrid ItemsSource="{Binding Customers, UpdateSourceTrigger="PropertyChanged"}" />

Jeżeli tego niezrobisz INotifyPropertyChanged nic Ci nie da. Wtedy dane zostaną zaktualizowane dopiero kiedy zmieni się focus kontrolki DataGrid (dla kontrolki TextBox jest wtedy gdy skończyłeś wpisywanie tekstu i ją opuściłeś).

P.S. Dla wzorca MVVM jest fajne narzędzie GalaSoft MVVM Light. Bardzo pomaga przy tworzeniu projektów.

Następna dyskusja:

WPF/MVVM i rysowanie wykresów




Wyślij zaproszenie do