繁体   English   中英

WPF 数据网格列的默认值

[英]Default Value For WPF Datagrid Column

我的 WPF 应用程序中有一个 DataGrid。 我想知道是否有办法显示数据网格中列的默认值。 例如,我让用户能够向 DataGrid 添加新行。 因此,在 DataGrid 的底部,总是有一个空白的空行供用户添加数据。 我希望这一行中的列有一个默认值。 有什么办法可以实现这个功能吗? 谢谢!

假设您的DataGridItemsSourceSomeClass的集合,并且您在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM