[英]Default Value For WPF Datagrid Column
我的 WPF 应用程序中有一个 DataGrid。 我想知道是否有办法显示数据网格中列的默认值。 例如,我让用户能够向 DataGrid 添加新行。 因此,在 DataGrid 的底部,总是有一个空白的空行供用户添加数据。 我希望这一行中的列有一个默认值。 有什么办法可以实现这个功能吗? 谢谢!
假设您的DataGrid
的ItemsSource
是SomeClass
的集合,并且您在 DataGrid 列中显示SomeClass
不同Properties
。 您可以做的是在默认SomeClass
构造函数中为Properties
分配一些默认值。 通过这种方式,您可以在 DataGrid 中拥有默认列值。
编辑
正如你所说,列的itemssource
是一个字符串,我能想到一种方法..
使它成为SomeClass
集合,它只有一个string
属性。 在SomeClass
的默认构造函数中,为此字符串分配一个默认值。 该默认值将出现在您的数据网格列中
实际上,您可以在 ValueConverters 的帮助下做到这一点。 当 CanUserAddRows=True 时,行的 DataContext 绑定到 ItemsSource 的元素或绑定到空白行的 {DataGrid.NewItemPlaceholder}。
<DataGrid ItemsSource="{Binding Path=Collection}" CanUserAddRows=True >
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource ShowSuitablePart}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
这是 ShowSuitablePart 转换器的代码。
public class ShowSuitablePart : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value.ToString() == "{DataGrid.NewItemPlaceholder}")
return "This is blank row, just click me to create a new one";
else
((YourCollectionObject)value).SomeProperty;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new Exception();
}
}
如果需要双向绑定,则必须在 DataTemplate 中使用 2 个元素。 一个用于空白行,第二个用于具有双向绑定的常规行。 设置可见性绑定以隐藏常规行的第一个元素和空白行的第二个元素。
请记住,如果您确定集合对象的某些属性的路径,它不会在空行情况下引发 ValueConverter。
在 DataGrind 上创建一个 CheckBox 列并将其绑定到“myBoolColumn”
<DataGridCheckBoxColumn Header="Selected" Binding="{Binding myBoolColumn}" />
DataTable data = new DataTable();
data.Columns.Add("myBoolColumn", typeof(System.Boolean));
data.Columns["myBoolColumn"].DefaultValue = false;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.