在使用双向绑定列表时数据不更新问题
使用 List 创建的列表是不具备双向绑定刷新功能的
需要使用 ObservableCollection 来替换 List 的
private ObservableCollection<ImageData> _imageList;
public ObservableCollection<ImageData> ImageList
{
get { return _imageList; }
set { _imageList = value; base.RaisePropertyChanged(() => ImageList); }
}
需要引用程序集 using System.Collections.ObjectModel;
DataGrid 中使用 TextBox 数据不更新到源数据
在使用 DataGrid 创建列表时,在列表中添加一列输入框,当手动在输入框输入值时,输入的值不会更新到 ViewModel 的 Data 中。
需要在 TextBox 的 Binding 添加 UpdateSourceTrigger 属性。
<DataGrid
Width="Auto"
Background="Transparent"
GridLinesVisibility="Horizontal"
IsReadOnly="True"
ItemsSource="{Binding DataList}">
<DataGrid.Columns>
<DataGridTextColumn
Width="Auto"
Binding="{Binding Key}"
Header="属性" />
<DataGridTextColumn
Width="Auto"
Binding="{Binding Value}"
Header="值" />
<DataGridTemplateColumn
Width="160"
CanUserResize="False"
Header="输入">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Input, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
UpdateSourceTrigger 一共有四种属性:
| 属性 | 值 | 描述 |
|---|---|---|
| Explicit | 0 | 使用使用 绑定的依赖属性的默认行为。 在 Windows 运行时 中,此计算结果与 PropertyChanged 的值相同。 |
| Explicit | 1 | 仅当调用 BindingExpression.UpdateSource 方法时,才会更新绑定源。 |
| LostFocus | 2 | 每当绑定目标元素失去焦点时,都会更新绑定源。 |
| PropertyChanged | 3 | 每当绑定目标值更改时,都会更新绑定源。 绑定系统会自动检测到这一点。 |