2012-01-13 20 views
2

私はWPFアプリケーションにDataGridを持っています。私は、データグリッドの列のデフォルト値を表示する方法があるのだろうかと思っていました。たとえば、ユーザーにDataGridに新しい行を追加させることができます。したがって、DataGridの下部には、ユーザーがデータを追加するための空の空の行が常に存在します。私はこの行の列のデフォルト値を持つことを望んでいました。この機能を実現する方法はありますか?ありがとう!WPF Datagridカラムのデフォルト値

+0

DataGridのitemssourceとは何ですか? –

+0

itemssourceの列は、observablecollectionです。

答えて

2

はのは、あなたのDataGridItemsSourceSomeClassのコレクションであり、あなたがデータグリッドの列にSomeClassの異なるPropertiesを表示しているとしましょう。あなたができることはデフォルトのSomeClassのコンストラクタで、Propertiesにあるデフォルト値を割り当てます。このようにして、DataGridにデフォルトの列値を設定できます。編集

あなたは、列のitemssourceは、私は考えることができる一つの方法がある文字列です言ったように...

はそれだけstring性質を持っていますSomeClassのコレクションを作成します。デフォルトコンストラクタ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(); 
    } 
} 

TwoWayバインディングが必要な場合は、DataTemplateで2つの要素を使用する必要があります。 1行は空行、2行目は2行目の通常行です。 Visibilityバインディングを設定して、通常行の最初の要素と空行の2番目の要素を非表示にします。

コレクションオブジェクトのいくつかのプロパティへのパスを指定すると、空白の行にValueConverterが表示されません。

関連する問題