当 DataGrid 绑定到 Double 的列表或可观察集合时,不允许添加行操作
No Add Rows Operation allowed when a DataGrid binds to a list or observable collection of Double
我在我的 ViewModel 中定义了一个 ObservableCollection<double>
。
ListWidthsFlat=new ObservableCollection<double>();
ListWidthsFlat.Add(120);
ListWidthsFlat.Add(200);
我的XAML代码:
<DataGrid ItemsSource="{Binding Path=ListWidthsFlat}" AutoGenerateColumns="False"
CanUserAddRows="True" CanUserDeleteRows="True" HorizontalAlignment="Center">
<DataGrid.Columns>
<DataGridTextColumn Header="{x:Static p:Resources.Width}" Binding="{Binding ., UpdateSourceTrigger=PropertyChanged}" Width="100" />
</DataGrid.Columns>
</DataGrid>
我想要的是显示 ObservableCollection,然后为我的 ObservableCollection<double>
.
中的 add/delete 项提供可能性
当我在 ObservableCollection<T>
上做同样的事情时,一切正常。
但是当绑定到 ObservableCollection<double>
时,参数 CanUserAddRows
似乎不起作用。
编辑 :
经过额外的测试,问题似乎是当我将 DataGrid 绑定到 ObservableCollection<T>
并设置 CanUserAddRow=True
时,会自动创建一个额外的空行(因此我可以编辑它并向 ObservableCollection 添加一个新项目。
当我将 DataGrid 绑定到 ObservableCollection<double>
时,没有创建空行。
这里有一个截图,让它更容易理解:
要正确执行 CanUserAddRows
绑定的对象列表必须实现 IEditableCollectionView Interface,它为绑定的集合提供基本的编辑功能。其中,列表中显示的项目必须具有 public 默认无参数构造函数。
因为值类型 double
没有构造函数,网格检测到它并且不提供添加行;因此,您会单独在 double
上看到失败,但它适用于对象,(class) List<T>
的实例,它具有双重特定属性.
要解决此限制,
- 创建一个 class,它有一个 public 无参数构造函数和一个
double
属性。
- 然后创建你的 class 列表并绑定到
ObservableCollection
(或者 List
实际上也可以工作,如果你不需要 observablecollection 的开销。)你的价值观。
- 在 Xaml 中,将数据网格中的列设置为指向双 属性。
- 您可能需要编写一个值构造函数,它将接收一个浮点数和 return 一个字符串,并将字符串转换为浮点数。
我在我的 ViewModel 中定义了一个 ObservableCollection<double>
。
ListWidthsFlat=new ObservableCollection<double>();
ListWidthsFlat.Add(120);
ListWidthsFlat.Add(200);
我的XAML代码:
<DataGrid ItemsSource="{Binding Path=ListWidthsFlat}" AutoGenerateColumns="False"
CanUserAddRows="True" CanUserDeleteRows="True" HorizontalAlignment="Center">
<DataGrid.Columns>
<DataGridTextColumn Header="{x:Static p:Resources.Width}" Binding="{Binding ., UpdateSourceTrigger=PropertyChanged}" Width="100" />
</DataGrid.Columns>
</DataGrid>
我想要的是显示 ObservableCollection,然后为我的 ObservableCollection<double>
.
当我在 ObservableCollection<T>
上做同样的事情时,一切正常。
但是当绑定到 ObservableCollection<double>
时,参数 CanUserAddRows
似乎不起作用。
编辑 :
经过额外的测试,问题似乎是当我将 DataGrid 绑定到 ObservableCollection<T>
并设置 CanUserAddRow=True
时,会自动创建一个额外的空行(因此我可以编辑它并向 ObservableCollection 添加一个新项目。
当我将 DataGrid 绑定到 ObservableCollection<double>
时,没有创建空行。
这里有一个截图,让它更容易理解:
要正确执行 CanUserAddRows
绑定的对象列表必须实现 IEditableCollectionView Interface,它为绑定的集合提供基本的编辑功能。其中,列表中显示的项目必须具有 public 默认无参数构造函数。
因为值类型 double
没有构造函数,网格检测到它并且不提供添加行;因此,您会单独在 double
上看到失败,但它适用于对象,(class) List<T>
的实例,它具有双重特定属性.
要解决此限制,
- 创建一个 class,它有一个 public 无参数构造函数和一个
double
属性。 - 然后创建你的 class 列表并绑定到
ObservableCollection
(或者List
实际上也可以工作,如果你不需要 observablecollection 的开销。)你的价值观。 - 在 Xaml 中,将数据网格中的列设置为指向双 属性。
- 您可能需要编写一个值构造函数,它将接收一个浮点数和 return 一个字符串,并将字符串转换为浮点数。