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 | - | - |

浙公网安备 33010602011771号