コマンドがトリガされる前にバインディングを更新する方法はありますか?キーボードのショートカットからアクセスできるコマンドを使用して編集および保存できるテキストフィールドがいくつかあります。テキストフィールドがフォーカスを失ったときにのみバインディングが通常更新されるため、キーを押してデータを保存すると、最後の変更は保持されません。その代わりに、まずテキストフィールドからタブアウトして更新してから保存する必要があります。コマンドがトリガされたときに強制的に更新するように強制する
更新を強制的にエレガントにする方法はありますか?私はMVVMを使用していますが(MVVMフレームワークはありません)、UI固有の事項をコマンドコードから守りたいと思います。また、すべての変更でバインドを更新する必要はありません。フォーカスが失われた場合にのみ更新するようにしても問題ありません。 OnPropertyChanged("YourPropertyName")
がバウンド値を更新するビューを警告する呼び出す
<TextBox Text="{Binding UserName,Mode=TwoWay,UpdateSourceTrigger=Explicit}">
<i:Interaction.Behaviors>
<h:TextBoxUpdatesTextBindingOnPropertyChanged />
</i:Interaction.Behaviors>
</TextBox>
:
public class TextBoxUpdatesTextBindingOnPropertyChanged : Behavior<TextBox>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.TextChanged += TextBox_TextChanged;
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.TextChanged -= TextBox_TextChanged;
}
void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
var bindingExpression = AssociatedObject.GetBindingExpression(TextBox.TextProperty);
bindingExpression.UpdateSource();
}
}
XAML:ここ
これまでのところ、このフォーラムで提案された最も柔軟で洗練されたソリューションです。うまくいきました - ありがとうございます – BCA