UpdateSourceTrigger和Mode的区别
在WPF中:
UpdateSourceTrigger= 只决定“什么时候”把值推回源;
Mode= 决定“要不要”推回源。
默认 Mode=OneWay 时,绑定引擎根本不会注册“目标→源”的管道,你就算把 UpdateSourceTrigger 写成 PropertyChanged 也没人监听,自然一次回写都不会发生。
PasswordBox 的附加属性默认就是 OneWay,所以必须显式 Mode=TwoWay 才开通回写通道;
而普通 TextBox.Text 默认自带 TwoWay,因此过去你只写 UpdateSourceTrigger=PropertyChanged 就够了——不是 PropertyChanged 神通广大,而是人家通道本来就开着。
以下是常见的控件UpdateSourceTrigger和Mode的默认值
控件 | 依赖属性 | 默认Mode | 默认UpdateSourceTrigger | 备注 |
---|---|---|---|---|
TextBox | Text | TwoWay | LostFocus | 只写UpdateSourceTrigger=PropertyChanged就能实时回写,不用再写TwoWay |
PasswordBox | Password(附加) | OneWay | Explicit | 必须显式Mode=TwoWay,否则不回写;触发时机由附加属性里UpdateSource()决定 |
TextBlock | Text | OneWay | - | - |
Button | Command | OneWay | - | - |
Button | Content | OneWay | - | - |
Button | CommandParameter | OneWay | - | - |
CheckBox | IsChecked | TwoWay | PropertyChanged | 勾选立即回写 |
RadioButton | IsChecked | TwoWay | PropertyChanged | 同上 |
ComboBox | SelectedItem/SelectedValue | TwoWay | PropertyChanged | 下拉立即回写 |
ListBox | SelectedItem/SelectedValue | TwoWay | PropertyChanged | 同上 |
ListView | SelectedItem/SelectedValue | TwoWay | PropertyChanged | 同上 |
DataGrid | SelectedItem/SelectedValue | TwoWay | PropertyChanged | 行选择即时回写;单元格编辑默认RowEditEnding(等效LostFocus) |
Slider | Value | TwoWay | PropertyChanged | 拖动即时回写 |
DatePicker | SelectedDate | TwoWay | PropertyChanged | 日期选择即时回写 |
ItemsControl | ItemsSource | OneWay | - | - |