如何在代码隐藏中设置和获取文本框的updatesourcetrigger?

Jat*_*ing 2 wpf textbox updatesourcetrigger

只是一个简短的问题:
在wpf中,如何在代码隐藏中设置和获取文本框的updatesourcetrigger?
谢谢

更新:
我遵循AngleWPF的代码:

        var bndExp = BindingOperations.GetBindingExpression(this, TextBox.TextProperty);

        var myBinding
          = bndExp.ParentBinding;

        var updateSourceTrigger = myBinding.UpdateSourceTrigger;
Run Code Online (Sandbox Code Playgroud)

但我得到了例外:

PresentationFramework.dll中出现未处理的"System.Reflection.TargetInvocationException"类型的异常附加信息:调用目标已抛出异常.

WPF*_*-it 9

你说的意思UpdateSourceTriggerTextBox?你的意思是说UpdateSourceTriggerTextBox.TextPropertyBinding

例如,如果你有一个TextBox名字myTextBox,其Text属性绑定到某个源,那么你可以轻松地通过调用得到UpdateSourceTriggerBinding对象GetBindingExpression().

   var bndExp
     = BindingOperations.GetBindingExpression(myTextBox, TextBox.Textproperty);

   var myBinding
     = bndExp.ParentBinding; 

   var updateSourceTrigger
     = myBinding.UpdateSourceTrigger;
Run Code Online (Sandbox Code Playgroud)

但是设置 UpdateSourceTrigger已经使用过的绑定很棘手.例如,在上述情况下,您将无法将其设置myBinding.UpdateSourceTrigger为其他内容.绑定对象已在使用时,不允许这样做.

您可能必须深度克隆绑定对象并将其设置为new UpdateSourceTrigger并将其分配回TextBox.Binding类不存在克隆.您可能必须编写自己的克隆代码.

  var newBinding = Clone(myBinding); //// <--- You may have to code this function.
  newBinding.UpdateSourceTrigger = UpdateSourceTrigger.Explicit;
  myTextBox.SetBinding(TextBox.TextProperty, newBinding);
Run Code Online (Sandbox Code Playgroud)

或者,您也可以尝试分离现有的Binding并更新它并将其分配回来......

  myTextBox.SetBinding(TextBox.TextProperty, null);
  myBinding.UpdateSourceTrigger = UpdateSourceTrigger.Explicit;
  myTextBox.SetBinding(TextBox.TextProperty, myBinding);
Run Code Online (Sandbox Code Playgroud)

如果这些提示有任何帮助,请告诉我.

  • 我知道这个答案已经有 7 年历史了,但是,如果它对任何人有帮助,克隆选项对我有用,并且在[这个 StackOverflow 答案](/sf/ask/2277901/ -can-you-clone-a-wpf-object#33036),可以在 3 行中克隆绑定。由于这些注释中没有太多空间,因此这是进行克隆的“丑陋”单行方法: `public static Binding Clone(Binding binding) =&gt; (Binding)XamlReader.Load(XmlReader.Create(new StringReader( XamlWriter.Save(绑定))));`。这 1 行需要使用 `System.Xml`、`System.Windows.Markup` 和 `System.IO` (2认同)