2012-01-13 274 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。