【问题标题】:TextEdit Binding becomes null after binding InputBindings绑定 InputBindings 后 TextEdit Binding 变为 null
【发布时间】:2025-12-24 01:20:08
【问题描述】:

我有一个按钮和这样的 TextEdit,它们工作正常:

<dxe:TextEdit Text="{Binding SearchText}" />
<Button Command="{Binding SearchCommand}" / >

我想在用户按 Enter 时进行搜索,所以我以这种方式更改了我的代码:

<dxe:TextEdit Text="{Binding SearchText}"  >
                    <dxe:TextEdit.InputBindings>
                        <KeyBinding Key="Enter" Command="{Binding SearchCommand}"  />
                    </dxe:TextEdit.InputBindings>
                </dxe:TextEdit>
<Button Command="{Binding SearchCommand}">

这可行,但在代码中,SearchText 始终为空。所以当我添加输入绑定时我破坏了一些东西,你能告诉我如何解决这个问题吗? 我也试过这个,但 SearchText 仍然为空。

<KeyBinding Key="Enter" Command="{Binding SearchCommand}"  CommandParameter="{Binding Path=Text, RelativeSource={RelativeSource AncestorType={x:Type dxe:TextEdit}}}" />

【问题讨论】:

  • 能否将 UpdateSourceTrigger 添加到 Text 属性并将其设置为 PropertyChanged 并查看它是否有效?
  • 成功了,谢谢!
  • 不错。将添加作为答案,以防它帮助其他人。

标签: c# wpf mvvm


【解决方案1】:

如果我没记错的话,DevExpress 编辑器的默认 UpdateSourceTrigger 属性是 LostFocus(我可能错了)

为了使您的代码正常工作,您必须通过将 UpdateSourceTrigger 设置为 PropertyChanged 来强制在目标值更改时更新源。

Text="{Binding GetIPag.TextQuery,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"

您可以在 MSDN 上阅读有关 UpdateSourceTrigger 属性的更多信息

【讨论】:

  • 谢谢,您为我节省了很多工作。不过尽量不要那么傲慢。
【解决方案2】:

您对代码的更改一无所知吗?您必须通过在您的类中继承 INotifyPropertyChanged 接口并调用 PropertyChangedEventHandler 事件来做到这一点;

【讨论】: