Введення в прив'язку даних wpf, tutorial, code q - a російська (ru)

Перетворення значення типу boolean в значення видимості

У цьому прикладі ховається червона рамка (межа), якщо прапорець не підтверджена за допомогою IValueConverter.

Примітка. BooleanToVisibilityConverter використовуваний в наведеному нижче прикладі, є вбудований перетворювач значень, розташований в просторі імен System.Windows.Controls.

впровадження INotifyPropertyChanged

INotifyPropertyChanged - це інтерфейс, який використовується джерелами прив'язки (тобто DataContext), щоб призначений для користувача інтерфейс або інші компоненти знали, що властивість було змінено. WPF автоматично оновлює користувальницький інтерфейс для вас, коли він бачить подія PropertyChanged. Бажано, щоб цей інтерфейс реалізований в базовому класі, на який можуть наслідувати всі ваші моделі viewmodels.

У C # 6 це все, що вам потрібно:

Це дозволяє вам викликати NotifyPropertyChanged двома різними способами:

  1. NotifyPropertyChanged (). який підніме подія для викликає пристрої, що викликає його, завдяки атрибуту CallerMemberName.
  2. NotifyPropertyChanged (nameof (SomeOtherProperty)). який підніме подія для SomeOtherProperty.

Для .NET 4.5 і вище, використовуючи C # 5.0, це можна використовувати замість цього:

У версіях .NET до 4.5 вам потрібно визначити імена властивостей як рядкові константи або рішення з використанням виразів.

Примітка. Можна прив'язати властивість «звичайного старого об'єкта C #» (POCO), яке не реалізує INotifyPropertyChanged і спостерігати, що прив'язки працюють краще, ніж очікувалося. Це прихована функція в .NET, і її, ймовірно, слід уникати. Тим більше, що це призведе до витоку пам'яті, якщо режим прив'язки НЕ OneTime (див. Тут).

Прив'язати до власності предка

Ви можете прив'язати властивість предка в візуальному дереві за допомогою прив'язки RelativeSource. Найближчий елемент управління вище в візуальному дереві, який має той же тип або отриманий з зазначеного вами типу, буде використовуватися в якості джерела прив'язки:

У цьому прикладі Button1 має сірий фон, тому що найближчий предок Grid має сірий фон. Button2 має білий фон, тому що найближчим предком, отриманим з FrameworkElement є білий StackPanel.

Прив'язати до властивості іншого іменованого елемента

Ви можете прив'язати властивість до іменованого елементу, але іменований елемент повинен бути в області.

визначення DataContext

Щоб працювати зі зв'язками в WPF, вам необхідно визначити DataContext. DataContext повідомляє прив'язки, де за замовчуванням отримують свої дані.

Ви також можете встановити DataContext за допомогою коду, але варто відзначити, що XAML IntelliSense кілька прискіпливий: в XAML для IntelliSense повинен бути встановлений строго типізований DataContext, що пропонує властивості, доступні для прив'язки.

Хоча існують рамки, які допоможуть вам більш точно визначити ваш DataContext (наприклад, MVVM Light має локатор viewmodel, який використовує інверсію управління), ми використовуємо швидкий і брудний метод для цілей цього посібника.

Ви можете визначити DataContext практично для будь-якого візуального елемента в WPF. DataContext зазвичай успадкований від предків у візуальному дереві, якщо він явно не перевизначений, наприклад, всередині ContentPresenter.

Зв'язування декількох значень за допомогою MultiBinding

MultiBinding дозволяє прив'язати кілька значень до одного і того ж властивості. У наступному прикладі кілька значень прив'язані до властивості Text текстового поля і відформатовані з використанням властивості StringFormat.

Крім StringFormat. IMultiValueConverter також може використовуватися для перетворення значень з прив'язок в одне значення для мети MultiBinding.

Однак MultiBindings не може бути вкладеним.

Схожі статті