【问题标题】:Default Value For WPF Datagrid ColumnWPF 数据网格列的默认值
【发布时间】:2026-01-23 16:35:01
【问题描述】:

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

【问题讨论】:

  • DataGrid 的 itemssource 是什么?
  • 列 itemssource 是一个 observablecollection

标签: c# wpf datagrid


【解决方案1】:

假设您的DataGrid 中的ItemsSourceSomeClass 的集合,并且您在DataGrid 列中显示SomeClass 中的不同Properties。您可以做的是在默认 SomeClass 的构造函数中为 Properties 分配一些默认值。这样你就可以在DataGrid中拥有默认的列值了。

编辑

正如你所说,列的itemssource 是一个字符串,我能想到一种方法..

使它成为SomeClass 的集合,它只有一个string 属性。在SomeClass 的默认构造函数中,为该字符串分配一个默认值。该默认值将出现在您的数据网格列中

【讨论】:

    【解决方案2】:

    在 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;
    

    【讨论】:

      【解决方案3】:

      实际上,您可以在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();
          }
      }
      

      如果您需要TwoWay 绑定,则必须在DataTemplate 中使用2 个元素。一个用于空白行,第二个用于具有TwoWay 绑定的常规行。设置可见性绑定以隐藏常规行的第一个元素和空白行的第二个元素。

      请记住,如果您确定集合对象的某些属性的路径,它不会在空白行情况下引发 ValueConverter

      【讨论】: