简单问题,假设我有这个TextBox(事实上,我确实有):
<TextBox.Text>
<Binding Path="MySourceProperty"
Mode="OneWayToSource"
UpdateSourceTrigger="PropertyChanged" />
</TextBox.Text>
只要Text属性发生变化,它就会成功更新MySourceProperty。我想要的除了MySourceProperty之外,当TextBox聚焦时也会更新。
有没有办法让一个控件有两个UpdateSourceTriggers?
有关详细信息,我有一个包含Label的父视图,绑定到MySourceProperty,另一个视图包含TextBox和ComboBox。
因此,当发生任何这些事件时,应更新MySourceProperty:
最后两个事件显然在这里,因为为控件提供焦点不会更改其Text或SelectedItem属性,因此也不会更新MySourceProperty。
答案 0 :(得分:1)
不确定这对你有什么帮助Kilazur
我会首先尝试Erno提及,如果这不符合您的情况,那么我已经做了类似的事情。
TextBox Name =&#34; itemNameTextBox&#34; Text =&#34; {Binding Path = ItemName, UpdateSourceTrigger =显式}&#34;
然后在代码后面的相应事件中调用UpdateSource(您在上面提到过)。
// itemNameTextBox is an instance of a TextBox
BindingExpression be = itemNameTextBox.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();
摘自here
答案 1 :(得分:0)
您可能希望将表示实体的这些控件放在单个数据模板或用户控件中。然后将该控件的datacontext绑定到组合框的选定项。绑定现在将相对于所选项目并将自动更新。无需处理焦点或多个更新触发器。
答案 2 :(得分:0)
有没有办法让一个控件有两个UpdateSourceTriggers?`
你的问题的答案是否定的。即使它是剂量,另一个触发器是LostFocus
。
如果你真的喜欢你说:
我可以通过在代码中使用事件处理程序来解决问题,但我努力失去WinForms的习惯。
然后根据我的理解:您使用两个控件TextBox
和ComboBox
来更新单个属性MySourceProperty
。我的建议是你应该使用TwoWay
绑定,或者你可以使用ComboBox
将ComboBox.IsEditable
设置为true,数据绑定ComboBox.Text
和{{1}来实际组合它们与您的ComboBox.SelectedItem
。
编辑 :如果你确实需要按照自己的方式去做,那么更好的方法就是绑定{而不是只使用一个属性。 {1}}和MySourceProperty
两个不同的属性。然后,您的TextBox.Text
应根据其焦点状态返回其中任何一个。