Обычно ViewModel связывается с View через привязки данных.ViewModel может предоставлять свойство, например LoginSuccessful
, к которому привязан View.Затем, когда свойство обновляется, представление получит уведомление PropertyChanged и изменит некоторые аспекты его внешнего вида.Как это будет происходить, меняется;например, текстовое свойство в XAML может быть привязано непосредственно к базовому свойству ViewModel:
<TextBox Text="{Binding Source={StaticResource UserViewModel}, Path=Username}"/>
ViewModel может выглядеть следующим образом:
public class UserViewModel : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
public string Username {
get { return _username; }
set {
_username = value;
PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Username"));
}
}
private string _username;
public UserViewModel() { }
}
Всякий раз, когда свойство Username изменяется наКласс UserViewModel, текстовое поле будет обновляться для отображения нового значения.
Однако этот подход работает не для всех ситуаций.При работе с логическими значениями часто полезно реализовать триггеры данных:
<TextBox Text="{Binding Source={StaticResource UserViewModel}, Path=Username}">
<TextBlock.Style>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding Source={StaticResource UserViewModel}, Path=IsTaken}" Value="True">
<Setter Property="Background" Value="Red"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBox>
Этот код расширяет предыдущий пример и окрашивает фон текстового поля в красный цвет, если для свойства IsTaken установлено значение true в ViewModel.Хорошая вещь о триггерах данных состоит в том, что они сбрасывают себя;например, если для этого параметра установлено значение false, фон вернется к своему первоначальному цвету.
Если вы хотите пойти другим путем и уведомить ViewModel о вводе пользователем или аналогичном важном событии, вы можете использоватькоманды.Команды могут быть привязаны к свойствам в XAML и реализованы с помощью ViewModel.Они вызываются, когда пользователь выполняет определенное действие, такое как нажатие кнопки.Команды могут быть созданы путем реализации интерфейса ICommand.