Czy możesz wymyślić scenariusz, w którym IEditableObject
będzie nadal przydatne w aplikacji WPF opartej na MVVM? Jeśli tak, czy masz przykład, który to demonstruje.IEditableObject w MVVM
Odpowiedz
Użyłem IEditableObject
w jednej z moich aplikacji. Na przykład, jeśli masz okno dialogowe do edycji czegoś, możesz zaimplementować IEditableObject na swoim ViewModelu. Wywołujesz BeginEdit()
, gdy otwiera się okno dialogowe, EndEdit()
, gdy użytkownik kliknie OK, a CancelEdit()
, gdy użytkownik kliknie anuluj.
IEditableObject
to dobry interfejs w dowolnym momencie, gdy chcesz przywrócić zmiany.
W typie wyświetlanym w postaci DataGrid
. Było to potrzebne, ponieważ kiedy korzystam z zakładek, w tej zakładce przechowuje się DataGrid
, przełączając zakładki potrzebne do wymuszenia zatwierdzenia w taki sposób, aby mówić w obrębie DataGrid
, jeśli komórka była aktywna; cofnięcie zmian, ponieważ nie zostały zatwierdzone. T
W celu uzyskania tej funkcjonalności zastosowano funkcję DataGrid
, ale część IEditableObject
znajduje się poniżej.
private IDatabaseConnection _copy;
void IEditableObject.BeginEdit()
{
if (this._copy == null)
this._copy = _container.Resolve<IDatabaseConnection>();
_copy.Database = this.Database;
_copy.DisplayName = this.DisplayName;
_copy.HostName = this.HostName;
_copy.Username = this.Username;
_copy.Password = this.Password;
}
void IEditableObject.CancelEdit()
{
this.Database = _copy.Database;
this.DisplayName = _copy.DisplayName;
this.HostName = _copy.HostName;
this.Username = _copy.Username;
this.Password = _copy.Password;
}
void IEditableObject.EndEdit()
{
_copy.Database = String.Empty;
_copy.DisplayName = String.Empty;
_copy.HostName = String.Empty;
_copy.Username = String.Empty;
_copy.Password = String.Empty;
}
Mam implementację IEditableObject
w mojej aplikacji tak, że mogę trzymać z aktualizacją mojego modelu danych, jeśli to, co użytkownik jest nieprawidłowy i przywrócić oryginalne wartości, jeżeli użytkownik opuści zmian.
- 1. WPG DataGrid wywołuje BeginEdit na obiekcie IEditableObject dwa razy?
- 2. MVVM (ICommand) w Silverlight
- 3. Model w MVVM
- 4. Menu kontekstowe w MVVM
- 5. MVVM - Walidacja
- 6. MVVM DataBinding
- 7. otworzyć nowe okno w MVVM
- 8. Podaj komendę View w MVVM
- 9. jak pokazać MessageBox w MVVM
- 10. Odbieranie CommandParameter wartość w MVVM
- 11. Grupowanie elementów MVVM w ListView
- 12. Stosowanie wzoru MVVM w QtQuick
- 13. Wdrażanie własnej MVVM vs. korzystanie z platformy MVVM?
- 14. MVVM, WPF i walidacja
- 15. Kiedy NIE używać MVVM?
- 16. TreeView BringIntoView z MVVM
- 17. MVVM - Potwierdzenie wyjścia
- 18. Asynchroniczne polecenia MVVM
- 19. MVVM przywoławczy i sortowania
- 20. Wzór MVVM z PySide
- 21. Od MVC do MVVM
- 22. MVVM + UserControl + Zależność własności
- 23. VirtualizingStackPanel + MVVM + wybór wielokrotny
- 24. Ogólna architektura sieciowa MVVM
- 25. MVVM Wiązanie z InkCanvas
- 26. PasswordBox z MVVM
- 27. MVVM: Wiązanie z ListBox.SelectedItem?
- 28. Nawigacja WPF Caliburn.Micro/mvvm
- 29. ItemsControl.ItemsSource MVVM performance
- 30. MVVM Light Threading Przykład
Czy implementujesz metody w każdej klasie ViewModel, czy tylko w oryginalnej klasie abstrakcji? Jeśli oryginalna klasa, jak to robisz? Myślałem o ponownym pobraniu modelu z bazy danych, ale modele nie mają wspólnej klasy nadrzędnej. Nie jestem pewien co do metody refleksji, ponieważ edytuję tylko część modelu. –
To zależy. Wdrożyłbym go tylko w abstrakcyjnej klasie bazowej, jeśli modele mają wspólną funkcjonalność do uruchamiania na tych zdarzeniach. Jeśli tak, to możesz go tam zaimplementować, ale w środku wywołaj metodę abstrakcyjną, taką jak OnBeginEdit(), która musi dostarczyć klasy pochodne. W ten sposób obejmuje się zarówno wspólną, jak i specyficzną funkcjonalnością. – Botz3000
Mam ViewModel, który jest zbiorem obiektów. Chcę użyć okna dialogowego do edycji wybranego elementu widoku siatki. Który implementuje 'IEditableObject', widok zawierający siatkę, ViewModel, do którego siatka jest związana, lub klasy, która ViewModel zawiera kolekcję? –