C# 无法在DataGrid UI中自动添加新行
我无法从UI在我的C# 无法在DataGrid UI中自动添加新行,c#,wpf,xaml,data-binding,datagrid,C#,Wpf,Xaml,Data Binding,Datagrid,我无法从UI在我的DataGrid中添加新行。下面是我的代码 <DataGrid CanUserAddRows="True" Name="dg" ItemsSource="{Binding list}" AutoGenerateColumns="False" > <DataGrid.Columns> <DataGridTextColumn Binding="{Binding Path=.}" Header="Text"/>
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>
在显示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));
//}
<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>
}
然后,您的XAML将绑定到您的属性:
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));
//}
<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”属性将是
list
或ObservableCollection
而不是string
问题在于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));
//}
<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>
}
然后,您的XAML将绑定到您的属性:
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));
//}
<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”属性将是
list
或observedcollection
,而不是string
,据我所知,绑定数据网格时无法添加行manually@Rodolfo当然可以。@Rodolfo那个例子是针对DataGridView的。据我所知,此处不适用于绑定DataGrid时无法添加行manually@Rodolfo当然可以。@Rodolfo那个例子是针对DataGridView的。这里不适用,那么如何处理我的模型类没有默认构造函数def的情况呢。?一个可选参数可以吗?那么你知道有什么解决方法吗?我不需要创建派生/包装类?那么如何处理我的模型类没有默认构造函数def的情况呢。?一个可选参数可以吗?那么你知道有什么解决方法吗?我不需要创建派生/包装类?