Nie rozumiem różnych trybów powiązań danych w WPF, takich jak:
- Jednokierunkowa
- Dwukierunkowy
- Jeden raz
- itp...
Co oznacza każdy z tych trybów?
Kiedy należy ich używać?
Odpowiedzi:
OneWay
: Użyj tego, jeśli chcesz, aby powiązana właściwość aktualizowała interfejs użytkownika.TwoWay
: Zachowuje się tak samo jak OneWay
i OneWayToSource
połączone. Powiązana właściwość zaktualizuje interfejs użytkownika, a zmiany w interfejsie użytkownika zaktualizują powiązaną właściwość (należy jej użyć na przykład z a TextBox
lub a Checkbox
).OneTime
: Zachowuje się tak samo, jak OneWay
z tym wyjątkiem, że aktualizuje interfejs użytkownika tylko raz. Powinien to być twój domyślny wybór dla wiązania (z różnych powodów, których nie będę tu omawiać), powinieneś używać innych typów powiązań tylko wtedy, gdy faktycznie potrzebujesz dodatkowej funkcjonalności.OneWayToSource
: Jest to przeciwieństwo OneWay
- zmiany wartości interfejsu użytkownika aktualizują powiązaną właściwość.Jeśli nic nie określisz, zachowanie będzie zależało od używanego formantu.
Aby uzyskać więcej informacji, zobacz BindingMode
wyliczenie w witrynie MSDN .
Wiązanie składa się z dwóch podmiotów:
Celem musi być DependencyObject
(aby powiązanie działało), a źródło może być a DependencyObject
lub powinno mieć jakiś mechanizm imitujący system powiązań WPF o zmianie ( INotifyPropetyChnaged
interfejs Implemeting ).
MVVM zaleca, aby projekt ViewModel był wolny od wszelkich odwołań związanych z widokiem, dlatego zaleca się użycie INotifyPropertyChanged
interfejsu, aby obiekt Source był słyszalny przez powiązanie WPF. Wiązanie zachodzi między właściwością źródła a właściwością celu (musi być a DependencyProperty
). Przykłady TextProperty
z TextBox
klasy jest z danymi do (powiedzmy) UserName
właściwości modelu widoku. Powiązanie WPF oferuje cztery typy powiązań. Pamiętaj, że powiązanie działa w wątku interfejsu użytkownika, chyba że określisz inaczej, aby działał inaczej.
UserName
, zostanie to odzwierciedlone w polu tekstowym. Jest to koszt pośredni, ponieważ system wiążący obserwuje tylko źródło zmian.TextProperty
i UserName
właściwość pozostaną zsynchronizowane i będą się wzajemnie aktualizować, jeśli jedna ulegnie zmianie. Jest to najbardziej kosztowne, ponieważ system wiązań musi obserwować obie strony pod kątem zmian.TextProperty
, UserName
właściwość przyjmie zmienioną wartość. Ponownie jest to koszt pośredni, ponieważ system wiążący obserwuje tylko cel zmian.Label
, np. TextBlock
Itp.Jeśli nic nie wymienisz, każda właściwość docelowa ma skojarzony ze sobą domyślny tryb powiązania. Np. TextProperty
A TextBox
ma domyślny tryb wiązania jako TwoWay
. Dla TextProperty
z a TextBlock
to jest jedna droga.
Wskazane jest, aby wybrać odpowiedni tryb, ponieważ może on pomóc w zmniejszeniu opóźnienia aplikacji, szczególnie w przypadkach, gdy masz dużą liczbę kontrolek w interfejsie użytkownika.
Więcej informacji na temat MVVM tutaj jest artykuł napisany przeze mnie.