all。私は数値コントロールのみを許可する "NumericTextBox"というユーザーコントロールを持っています。私はそれをVM値OneWayToSourceにバインドすることができ、テキストボックスにフォーカスを合わせながらEnterキーを押すとVM値の更新のみができるようにするために、別の特殊な動作を行う必要があります。私はすでにキーを押したときに起きるEnterPressedイベントを持っていますが、バインドを更新するためにそのアクションを引き起こす方法を考え出すのは苦労しています...入力時にバインディングのみを更新するWPFテキストボックス
9
A
答えて
11
バインディング式で、UpdateSourceTrigger明示的にEnterPressedイベントを処理するとき
Text="{Binding ..., UpdateSourceTrigger=Explicit}"
そして、これは実際のバウンドプロパティにテキストボックスから値をプッシュしますが、バインディング式にUpdateSourceを呼び出します。あなたはMVVMを使用している場合
BindingExpression exp = textBox.GetBindingExpression(TextBox.TextProperty);
exp.UpdateSource();
3
あなたはテキストボックスPreviewKeyUpにUpdateSourceを呼び出して、カスタム添付プロパティと一緒にdecastelijauのアプローチを組み合わせて使用することができます。
public static readonly DependencyProperty UpdateSourceOnKey = DependencyProperty.RegisterAttached(
"UpdateSourceOnKey",
typeof(Key),
typeof(TextBox),
new FrameworkPropertyMetadata(false)
);
public static void SetUpdateSourceOnKey(UIElement element, Key value)
{
//TODO: wire up specified key down event handler here
element.SetValue(UpdateSourceOnKey, value);
}
public static Boolean GetUpdateSourceOnKey(UIElement element)
{
return (Key)element.GetValue(UpdateSourceOnKey);
}
次に、あなたが行うことができます:ここでは
<TextBox myprops:UpdaterProps.UpdateSourceOnKey="Enter" ... />
7
はアンダーソンのIMEが提供するアイデアの完全なバージョンです:
public static readonly DependencyProperty UpdateSourceOnKeyProperty =
DependencyProperty.RegisterAttached("UpdateSourceOnKey",
typeof(Key), typeof(TextBox), new FrameworkPropertyMetadata(Key.None));
public static void SetUpdateSourceOnKey(UIElement element, Key value) {
element.PreviewKeyUp += TextBoxKeyUp;
element.SetValue(UpdateSourceOnKeyProperty, value);
}
static void TextBoxKeyUp(object sender, KeyEventArgs e) {
var textBox = sender as TextBox;
if (textBox == null) return;
var propertyValue = (Key)textBox.GetValue(UpdateSourceOnKeyProperty);
if (e.Key != propertyValue) return;
var bindingExpression = textBox.GetBindingExpression(TextBox.TextProperty);
if (bindingExpression != null) bindingExpression.UpdateSource();
}
public static Key GetUpdateSourceOnKey(UIElement element) {
return (Key)element.GetValue(UpdateSourceOnKeyProperty);
}
関連する問題
- 1. WPFテキストボックス式バインディング
- 2. バインディングの更新時にアニメーションWPFテキストを表示する方法
- 3. WPFテキストボックスへのバインディングの更新がありません
- 4. WPFテキストボックスのバインディングと改行
- 5. C#WPFバインディングDependencyProperty Not Workingテキストボックス
- 6. 入力時にユーザー入力を更新する
- 7. 入力するテキストボックスに - : - 入力する時間
- 8. 入力時に入力フィールドを更新します。
- 9. WPF - コマンドを実行するためにテキストボックスに入力する
- 10. 入力時にテキストボックスを隠す場合
- 11. 入力変更時のテーブルデータ更新
- 12. WPFテキストボックス「通常」のテキスト入力
- 13. WPFのバインディングからUI更新を一時停止する方法
- 14. テキストボックスの入力時にラジオをチェック/アンチェック
- 15. テキストボックスの入力を変更する
- 16. テキストボックスのバインディングを更新する方法は?
- 17. マウスの入力時にWPFテキストボックスの境界線の色が変化します
- 18. WPF TargetNullValueは、テキストボックスのは、バインディングがOneWayToSource
- 19. 保存時にWPF/MVVMがテキストボックスの変更を検出する
- 20. は動的にテキストボックスと入力バインディングを生成:どこコマンド
- 21. 通貨コンバータの入力を瞬時に更新するには?
- 22. jquery最新の入力変更時のデータ量を更新
- 23. AngularJS - ボタンクリック時にダイナミックテーブルの入力ボックスの値を更新する
- 24. 非インクリメンタルフルモデル更新によるWPFバインディングの活用
- 25. ページの更新時に入力フィールドをクリアする
- 26. 編集時に入力のバウンド値を更新する
- 27. ページの更新時に入力フィールドをクリアする(Microsoft Edge)
- 28. 別のタブをクリックした後、またはテキストボックスに入力した後にのみng-repeatを更新する
- 29. バインディングを使用してWPFで更新をキャンセルする
- 30. WPF:入力時間(hh:mm:ss)