无法在数据网格 UI 中自动添加新行
本文关键字:添加 新行 UI 网格 数据 数据网 | 更新日期: 2023-09-27 18:34:47
我无法从 UI 在DataGrid
中添加新行。下面是我的代码。
<DataGrid CanUserAddRows="True" Name="dg" ItemsSource="{Binding list}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=.}" Header="Text"/>
<DataGridTextColumn Binding="{Binding Length}" Header="Length"/>
</DataGrid.Columns>
</DataGrid>
list
是上面Binding
中的字符串列表。通常,当我设置CanUserAddRows="True"
时,我能够在其他示例中自动在UI上添加行。
我的财产如下:
public List<string> list { get; set; }
在显示DataGrid
之前,它已被初始化。因此,无需为此属性实现INotifyPropertyChanged
。
有人可以解释我为什么DataGrid
会这样吗?如何实现期望的行为?
问题是string
没有无参数构造函数,因此网格无法为允许用户添加新行的空网格行创建新实例。 此外,网格不能将 "." 属性"设置"到字符串上。
一种选择是创建自己的公开文本和长度属性的类:
public class StringMember : INotifyPropertyChanged
{
private string m_actualString;
public string Text
{
get { return m_actualString; }
set
{
m_actualString = value;
//OnPropertyChanged("Text");
//OnPropertyChanged("Length");
}
}
public int Length { get { return Value.Length; } }
//public event PropertyChangedEventHandler PropertyChanged;
//protected virtual void OnPropertyChanged(string propertyName = null)
//{
// PropertyChangedEventHandler handler = PropertyChanged;
// if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
//}
}
然后,XAML 将绑定到属性:
<DataGrid CanUserAddRows="True" Name="dg" ItemsSource="{Binding list}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Text}" Header="Text"/>
<DataGridTextColumn Binding="{Binding Length}" Header="Length"/>
</DataGrid.Columns>
</DataGrid>
在这种情况下,您的"列表"属性将是List<StringMember>
或ObservableCollection<StringMember>
而不是string
。