Den*_*gan 12 c# data-binding wpf two-way-binding
我在WPF中听说过很多关于双向绑定的内容,但我并不完全清楚如何实现它或它实际意味着什么.
我有ListView
一堆物品.当用户选择新项目时,TextBox
应用程序中的a将更改其文本以显示所选项目的某些属性.
但是当用户更改文本框中的文本时,我希望ListView
立即更新该项目.是否有任何"双向绑定"神奇的WPF方式来实现这一目标?
ito*_*son 34
马克的答案显示了如何完成你想要的,但你也更广泛地询问了"如何完成[双向绑定]及其实际意义."
单向绑定意味着绑定目标(例如控件)将显示来自绑定源(例如业务对象)的数据,并将在业务对象更改时自行更新,但对控件的更改将不会传播回业务宾语.例如,如果Person.Name从"bob"变为"kate",则绑定到Name的TextBlock.Text也将从"bob"变为"kate".
双向绑定仅意味着不仅业务对象中的更改反映在UI中,而且用户在UI中所做的更改也会传播回业务对象.所以现在当用户编辑绑定到Name的TextBox.Text时,比如将"kate"更改为"edmund",WPF也会将Person.Name属性设置为"edmund".
要完成此操作,只需在Binding声明上设置Mode = TwoWay即可.默认情况下,某些属性绑定为双向:例如,TextBox.Text默认绑定TwoWay,这就是Mark的代码不需要Mode声明的原因.此外,正如Mark所说,默认情况下,WPF仅在控件失去焦点时将更改传播回业务对象.如果您有两个绑定到同一属性的UI元素,这可能意味着它们看起来不同步,在这种情况下,您可以使用UpdateSourceTrigger强制WPF在属性更改时传播.
MSDN通过一些清晰的图表详细介绍了这一点:请参阅WPF SDK中的数据绑定概述.
Mar*_*iec 11
如果你还没有,你需要INotifyPropertyChanged
为你的班级实施你所约束的.
此外,当您说您希望ListBox
立即更新该项目时,您的意思是您希望它在您输入时更改TextBox
.默认情况下,TextBox.Text
属性在失去焦点时更新其源,但您可以通过将绑定设置UpdateSourceTrigger
为PropertyChanged
:
{Binding Source={...}, Path=Whatever, UpdateSourceTrigger=PropertyChanged}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13965 次 |
最近记录: |