WPF 数据不刷新问题集合

172 阅读1分钟

在使用双向绑定列表时数据不更新问题

使用 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 一共有四种属性:

属性描述
Explicit0使用使用 绑定的依赖属性的默认行为。 在 Windows 运行时 中,此计算结果与 PropertyChanged 的值相同。
Explicit1仅当调用 BindingExpression.UpdateSource 方法时,才会更新绑定源。
LostFocus2每当绑定目标元素失去焦点时,都会更新绑定源。
PropertyChanged3每当绑定目标值更改时,都会更新绑定源。 绑定系统会自动检测到这一点。

持续更新中 。。。