WPF UpdateSourceTrigger属性
在编写代码的时候,有时候你会发现一个现象就是:使用TextBox中,后台数据已经刷新,但是界面上未立即刷新,失去焦点才更新界面,这是为什么呢,其根本原因在于:界面上只是未及时刷新,更新参数设置不正确。
TextBox直接绑定参数,不指明数据改变时如何触发,则是默认的失去焦点(LostFocuse)后才更新界面上显示的值。如下面示例代码
<TextBox Text="{Binding UserName}"/>
下面以一个示例进行说明,View中文本框绑定内容如下:
<TextBox Text="{Binding UserName,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"/>
在上述的代码示例中可看到多了两个属性,一个是UpdateSourceTrigger,一个是Mode属性。
UpdateSourceTrigger的作用是:当做何种改变的时候通知数据源我们做了改变。该属性有如下表格的四种值,详细见下面表格的描述。
枚举类型 | 效果 |
Default | 默认值(默认为LostFocuse) |
Explicit | 当应用程序调用 UpdateSource 方法时生效 |
LostFocus | 失去焦点的时候触发 |
PropertyChanged | 数据属性改变的时候触发 |
这边我们直接使用 PropertyChanged,当UI数据改变的时候,我们再通知到数据源去做修改。
**************************************************************************************************************
其中Mode属性,有五个参数,详细如下表格所示:
枚举类型 | 效果 |
OneWay | 源发生变化,数据就会从源流向目标 |
OneTime | 绑定会将数据从源发送到目标;但是,仅当启动了应用程序或 DataContext 发生更改时才会如此操作,因此,它不会侦听源中的更改通知。 |
OneWayToSource | 绑定会将数据从目标发送到源 |
TwoWay | 绑定会将源数据发送到目标,但如果目标属性的值发生变化,则会将它们发回给源 |
Default | 绑定的模式根据实际情况来定,如果是可编辑的就是TwoWay,只读的就是OneWay |
注意:使用TextBox控件时,UpdateSourceTrigger的默认值是LostFocuse即失去焦点后触发更新界面UI显示,如果需要即时更新则需要设置为PropertyChanged。
**************************************************************************************************************