一个控件的多个UpdateSourceTriggers

时间:2014-10-13 14:18:20

标签: c# wpf updatesourcetrigger

简单问题,假设我有这个TextBox(事实上,我确实有):

<TextBox.Text>
    <Binding  Path="MySourceProperty"
              Mode="OneWayToSource"
              UpdateSourceTrigger="PropertyChanged" />
</TextBox.Text>

只要Text属性发生变化,它就会成功更新MySourceProperty。我想要的除了MySourceProperty之外,当TextBox聚焦时也会更新。

有没有办法让一个控件有两个UpdateSourceTriggers?


有关详细信息,我有一个包含Label的父视图,绑定到MySourceProperty,另一个视图包含TextBox和ComboBox。

因此,当发生任何这些事件时,应更新MySourceProperty:

  • TextBox.Text更改
  • ComboBox.SelectedItem更改
  • TextBox聚焦
  • ComboBox专注

最后两个事件显然在这里,因为为控件提供焦点不会更改其Text或SelectedItem属性,因此也不会更新MySourceProperty。


编辑:我把这个问题用粗体来表达我想要的东西。我可以通过在代码中使用事件处理程序来解决问题,但我正在努力失去WinForms的习惯。但如果它是唯一的解决方案,请随时回答。

3 个答案:

答案 0 :(得分:1)

不确定这对你有什么帮助Kilazur

我会首先尝试Erno提及,如果这不符合您的情况,那么我已经做了类似的事情。

  1. 将UpdateSourceTrigger设置为Explicit。
  2.   

    TextBox Name =&#34; itemNameTextBox&#34; Text =&#34; {Binding Path = ItemName,   UpdateSourceTrigger =显式}&#34;

    1. 然后在代码后面的相应事件中调用UpdateSource(您在上面提到过)。

      // itemNameTextBox is an instance of a TextBox
      BindingExpression be = itemNameTextBox.GetBindingExpression(TextBox.TextProperty);
      be.UpdateSource();
      
    2. 摘自here

答案 1 :(得分:0)

您可能希望将表示实体的这些控件放在单个数据模板或用户控件中。然后将该控件的datacontext绑定到组合框的选定项。绑定现在将相对于所选项目并将自动更新。无需处理焦点或多个更新触发器。

答案 2 :(得分:0)

  

有没有办法让一个控件有两个UpdateSourceTriggers?`

你的问题的答案是否定的。即使它是剂量,另一个触发器是LostFocus

如果你真的喜欢你说:

  

我可以通过在代码中使用事件处理程序来解决问题,但我努力失去WinForms的习惯。

然后根据我的理解:您使用两个控件TextBoxComboBox来更新单个属性MySourceProperty。我的建议是你应该使用TwoWay绑定,或者你可以使用ComboBoxComboBox.IsEditable设置为true,数据绑定ComboBox.Text和{{1}来实际组合它们与您的ComboBox.SelectedItem

编辑 :如果你确实需要按照自己的方式去做,那么更好的方法就是绑定{而不是只使用一个属性。 {1}}和MySourceProperty两个不同的属性。然后,您的TextBox.Text应根据其焦点状态返回其中任何一个。