C# 如何禁止Wpf DataGrid单击事件生成新行

C# 如何禁止Wpf DataGrid单击事件生成新行,c#,wpf,datagrid,C#,Wpf,Datagrid,当我使用DataGrid时,因为我需要添加新行来编辑数据,所以,我必须让 CanUserAddRows="True" . 但我发现,当我点击另一个单元格时,dataGrid将生成一个新行,我不知道如何禁止该事件。我发现,由于我绑定了“float”或“int”数据,单元格将用“0”填充单元格,我可以做些什么,让它成为没有“0”填充的空间。因此,任何人都可以给我一些建议,谢谢。您应该将DataGridTextColumn的绑定设置为int?类型的属性,而不是int。换句话说,考虑一个有两个属性的

当我使用DataGrid时,因为我需要添加新行来编辑数据,所以,我必须让

CanUserAddRows="True" . 

但我发现,当我点击另一个单元格时,dataGrid将生成一个新行,我不知道如何禁止该事件。我发现,由于我绑定了“float”或“int”数据,单元格将用“0”填充单元格,我可以做些什么,让它成为没有“0”填充的空间。因此,任何人都可以给我一些建议,谢谢。

您应该将DataGridTextColumn的绑定设置为
int?
类型的属性,而不是
int
。换句话说,考虑一个有两个属性的模型,一个是int类型,另一个是int:< /p>
public class Model : INotifyPropertyChanged
{
    int? _indexNullable;
    public int? IndexNullable { get { return _indexNullable; } set { _indexNullable = value; RaisePropertyChanged("IndexNullable"); } }

    int _index;
    public int Index { get { return _index; } set { _index = value; RaisePropertyChanged("Index"); } }

    public event PropertyChangedEventHandler PropertyChanged;
    internal void RaisePropertyChanged(string propname)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propname));
    }
}
您可以在以下DataGrid中看到差异:

<DataGrid ItemsSource="{Binding Models}" DataContext="{Binding}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Index}"/>
        <DataGridTextColumn Binding="{Binding IndexNullable}"/>
    </DataGrid.Columns>
</DataGrid>


类似地,如果您使用的是
float
,请将其更改为可空:
float?
我非常感谢您提供详细的程序。但我不熟悉MVVM,我只使用简单的Staff类,'public class Staff{public int ID{get;set;}public string Name{get;set;}public float Test u Score{get;set;}public float[]G=new float[100];}',并使用observableCollection,因此,对我来说进行更大的更改有点困难。我只是像“public float?Test_Score{get;set;}”那样更改我的程序,程序将报告一个错误
public float?Test_Score{get;set;}
必须完成这项工作。但是,您应该更改程序的不同部分以应对此更改。因此,等等,也许其他人会提出不同的答案。它不能更改为浮动?如果您想阻止新行出现,为什么不能将CanUserAddRows属性设置为false?或者您打算如何显示广告d行?因为我需要添加新行,所以这个页面是为我添加新行而不是显示数据。所以我不能让CanUserAddRows为false