1

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

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

每当其 Text 属性更改时,它将成功更新 MySourceProperty。除此之外,我还希望 MySourceProperty 在 TextBox 获得焦点时也得到更新。

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


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

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

  • TextBox.Text 更改
  • ComboBox.SelectedItem 更改
  • 文本框获得焦点
  • 组合框变得专注

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


编辑:我已经用粗体提出了这个问题,以明确我想要什么。我可以通过在后面的代码中使用事件处理程序来解决这个问题,但我正在努力改掉我的 WinForms 习惯。但如果这是唯一的解决方案,请随意回答。

4

3 回答 3

2

不确定这是否对您有帮助

正如Erno所提到的,我会先尝试一下,如果这不适合您的情况,那么我已经做了类似的事情。

  1. 将 UpdateSourceTrigger 设置为显式。

文本框名称="itemNameTextBox" 文本="{绑定路径=ItemName, UpdateSourceTrigger=Explicit}"

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

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

这里引用

于 2014-10-13T14:48:06.420 回答
0

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

于 2014-10-13T14:45:26.573 回答
0

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

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

如果你真的像你说的:

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

然后根据我的理解:您正在使用两个控件TextBoxComboBox更新单个属性MySourceProperty。我的建议是您应该使用TwoWay绑定,或者您可以通过使用ComboBoxwith ComboBox.IsEditableset 为 true、数据绑定ComboBox.TextComboBox.SelectedItem与您的MySourceProperty.

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

于 2014-10-13T15:00:30.340 回答