首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

UWP DataGrid列绑定到可以为空的双精度值,但修改单元格不会修改该属性

基础概念

UWP(Universal Windows Platform)是微软推出的一个用于构建跨平台应用的框架。DataGrid 是 UWP 中用于显示和编辑数据的控件。双精度值(double)是一种数值类型,可以表示非常大或非常小的数值,并且可以为空(null)。

相关优势

使用 DataGrid 绑定到可以为空的双精度值有以下优势:

  1. 灵活性:允许数据中存在缺失值。
  2. 数据完整性:通过允许 null 值,可以更好地表示数据的完整性。
  3. 用户友好:用户在编辑时可以选择不输入值,系统会自动将其视为 null

类型与应用场景

类型

  • Nullable<double> 或简写为 double? 表示可以为空的双精度值。

应用场景

  • 财务报表中某些字段可能暂时没有数据。
  • 科学计算中某些测量结果可能无效或缺失。
  • 数据库中的某些字段允许空值。

遇到的问题及原因

问题描述: 修改 DataGrid 单元格不会更新绑定的属性值。

原因分析

  1. 数据绑定问题:可能是数据绑定的路径不正确或不完整。
  2. 属性变更通知:绑定的属性可能没有实现 INotifyPropertyChanged 接口,导致 UI 无法及时更新。
  3. 单元格编辑模板DataGrid 的单元格编辑模板可能没有正确配置。

解决方案

步骤 1:确保数据模型实现 INotifyPropertyChanged

代码语言:txt
复制
public class MyDataModel : INotifyPropertyChanged
{
    private double? _myValue;
    public double? MyValue
    {
        get => _myValue;
        set
        {
            if (_myValue != value)
            {
                _myValue = value;
                OnPropertyChanged(nameof(MyValue));
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

步骤 2:正确绑定 DataGrid

在 XAML 中:

代码语言:txt
复制
<DataGrid x:Name="dataGrid" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="My Value" Binding="{Binding MyValue, Mode=TwoWay}" />
    </DataGrid.Columns>
</DataGrid>

步骤 3:确保数据源正确设置

在代码后台:

代码语言:txt
复制
public ObservableCollection<MyDataModel> DataItems { get; set; } = new ObservableCollection<MyDataModel>();

// 初始化数据
DataItems.Add(new MyDataModel { MyValue = 123.45 });
DataItems.Add(new MyDataModel { MyValue = null });

dataGrid.ItemsSource = DataItems;

示例代码

完整的示例代码如下:

MyDataModel.cs:

代码语言:txt
复制
public class MyDataModel : INotifyPropertyChanged
{
    private double? _myValue;
    public double? MyValue
    {
        get => _myValue;
        set
        {
            if (_myValue != value)
            {
                _myValue = value;
                OnPropertyChanged(nameof(MyValue));
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

MainPage.xaml:

代码语言:txt
复制
<Page
    x:Class="YourNamespace.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:YourNamespace">

    <Grid>
        <DataGrid x:Name="dataGrid" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="My Value" Binding="{Binding MyValue, Mode=TwoWay}" />
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Page>

MainPage.xaml.cs:

代码语言:txt
复制
public sealed partial class MainPage : Page
{
    public ObservableCollection<MyDataModel> DataItems { get; set; } = new ObservableCollection<MyDataModel>();

    public MainPage()
    {
        this.InitializeComponent();

        // 初始化数据
        DataItems.Add(new MyDataModel { MyValue = 123.45 });
        DataItems.Add(new MyDataModel { MyValue = null });

        dataGrid.ItemsSource = DataItems;
    }
}

通过以上步骤和代码示例,可以确保 DataGrid 中的双精度值在编辑后能够正确更新绑定的属性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的沙龙

领券