WPFにおける双方向データバインディングの方法は何ですか?
WPFでは、双方向データバインディングを実現するには、以下の方法を使用できます:
- モードは「双方向」です。
サンプルコード:
ViewModelのクラスでプロパティを定義します。
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
OnPropertyChanged(nameof(Name)); //触发属性更改通知
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
XAML内でのプロパティのバインド:
<TextBox Text="{Binding Name, Mode=TwoWay}" />
- Commandを使用すると、UI要素(例えばボタン)のCommand属性をViewModelの命令にバインドすることができ、ViewModelで双方向のデータバインディングとロジック処理を実現することができます。
サンプルコード:
ViewModel内にコマンドを定義します。
private ICommand _updateCommand;
public ICommand UpdateCommand
{
get
{
if (_updateCommand == null)
{
_updateCommand = new RelayCommand(UpdateName, CanUpdateName);
}
return _updateCommand;
}
}
private bool CanUpdateName(object parameter)
{
//根据具体逻辑判断是否可以执行命令
return true;
}
private void UpdateName(object parameter)
{
//根据具体逻辑更新Name属性的值
Name = "New Name";
}
XAMLにおけるコマンドのバインディング:
<Button Content="Update" Command="{Binding UpdateCommand}" />
ユーザーがボタンをクリックした時に、命令が実行されてName属性の値が更新されます。