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 OneWayi OneWayToSourcepołą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 TextBoxlub a Checkbox).OneTime: Zachowuje się tak samo, jak OneWayz 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 BindingModewyliczenie 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 DependencyObjectlub powinno mieć jakiś mechanizm imitujący system powiązań WPF o zmianie ( INotifyPropetyChnagedinterfejs Implemeting ).
MVVM zaleca, aby projekt ViewModel był wolny od wszelkich odwołań związanych z widokiem, dlatego zaleca się użycie INotifyPropertyChangedinterfejsu, 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 TextPropertyz TextBoxklasy jest z danymi do (powiedzmy) UserNamewł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.TextPropertyi UserNamewł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, UserNamewłaściwość przyjmie zmienioną wartość. Ponownie jest to koszt pośredni, ponieważ system wiążący obserwuje tylko cel zmian.Label, np. TextBlockItp.Jeśli nic nie wymienisz, każda właściwość docelowa ma skojarzony ze sobą domyślny tryb powiązania. Np. TextPropertyA TextBoxma domyślny tryb wiązania jako TwoWay. Dla TextPropertyz a TextBlockto 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.