一个控件有多个UpdateSourceTriggers



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

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

只要其Text属性发生更改,它就会成功地更新MySourceProperty。除此之外,我还想在TextBox集中时更新MySourceProperty。

有没有办法为一个控件设置两个UpdateSourceTriggers


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

因此,当发生以下任何事件时,MySourceProperty都应该更新:

  • TextBox.文本更改
  • ComboBox.SelectedItem更改
  • 文本框聚焦
  • 组合框集中注意力

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


编辑:为了清楚我想要什么,我用粗体写了这个问题。我可以通过在代码背后使用事件处理程序来解决这个问题,但我正在努力摆脱我的WinForms习惯。但如果这是唯一的解决方案,请随时回答。

不确定这是否有助于Kilazur

正如Erno所提到的,我会先尝试一下,如果这不适合你的场景,那么我也做了类似的事情。

  1. 将UpdateSourceTrigger设置为Explicit

TextBox Name="itemNameTextBox"Text="{Binding Path=ItemName,UpdateSourceTrigger=Explicit}"

  1. 然后在代码隐藏中的各个事件中调用UpdateSource(您在上面提到过)。

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

从这里引用

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

有没有办法为一个控件设置两个UpdateSourceTriggers?`

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

如果你真的像你说的那样:

我可以通过在代码背后使用事件处理程序来解决这个问题,但我正在努力摆脱我的WinForms习惯。

然后根据我的理解:您使用两个控件TextBoxComboBox来更新单个属性MySourceProperty。我的建议是,您应该使用TwoWay绑定,或者您可以通过使用ComboBox和设置为true的ComboBox.IsEditable,并使用ComboBox.TextComboBox.SelectedItem与您的MySourceProperty进行数据绑定来将它们组合。

编辑 :如果您确实需要按照当前的方式执行,那么与其只使用一个属性,不如将TextBox.TextComboBox.SelectedItem绑定到两个不同的属性。然后,您的MySourceProperty应该根据它们的焦点状态返回其中任何一个。

相关内容

  • 没有找到相关文章

最新更新