无法在数据网格 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会这样吗?如何实现期望的行为?

无法在数据网格 UI 中自动添加新行

问题是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