2012-01-13 99 views
2

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

+0

什么是DataGrid的itemssource? – 2012-01-13 07:05:50

+0

列itemssource是一个可观察的集合 2012-01-13 07:07:16

回答

2

比方说,你DataGridItemsSourceSomeClass集合,你是显示不同SomeClass在DataGrid列的Properties。你可以做的是在构造函数的默认SomeClass中指定Properties的一些默认值。通过这种方式,您可以在DataGrid中使用默认列值。

编辑

正如你所说的柱的itemssource是一个字符串有我能想到的一个办法..

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

0

实际上,您可以在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。