【发布时间】:2015-02-01 05:33:45
【问题描述】:
我在使用可编辑组合框和更新绑定时遇到了一些问题。目前我有一个 ComboBox,它的 UpdateSourceTrigger=LostFocus 这是因为我需要等待用户完成输入,然后才能确定该值是否为新值(从而创建一个新值)。
不幸的是,我还有另一个功能,它需要在值更改时更新绑定。 Aka,在这种情况下,LostFocus 对我没有好处。在 ComboBox 中选择一个新值不会导致 LostFocus 触发(显然)。所以我需要找到一种方法来强制更新绑定。
我查看了 SelectionChanged 并强制更新绑定:
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding ParentConversation.ViewModel.ComboSelectionChanged}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type controls:StoryForgeComboBox}}}"/>
</i:EventTrigger>
并像这样在后面的代码中更新绑定:
be = BindingOperations.GetBindingExpression(ele, ComboBox.TextProperty);
if (be != null)
{
be.UpdateSource();
}
很遗憾,我现在无法更新绑定,因为值尚未更改。请参阅此 stackoverflow 主题:ComboBox- SelectionChanged event has old value, not new value
有一个技巧,您可以使用 DropDownClosed 事件然后更新绑定,这有效,但如果您使用永远不会打开 ComboBox 的向上/向下箭头键则不起作用。还挂钩到 KeyUp 和 KeyDown 还为时过早。绑定还不能更新。
所以我的问题是,什么时候是说“嘿,组合框先生,您现在可以更新绑定”的好时机。
干杯。
【问题讨论】:
-
So I need to find a way to force update the binding- 你到底想达到什么目的?在 MVVM 中,ViewModel 实现了INotifyPropertyChanged,因此,如果您更改属性值(或显式更改属性值),则从源更新隐含地发生,而在其他方向,源更新是(如您所说)UpdateSourceTrigger=ValueChanged。哪一个是你的问题?
标签: c# wpf mvvm binding combobox