2012-01-13 23 views
2

У меня есть DataGrid в моем приложении WPF. Мне было интересно, есть ли способ показать значения по умолчанию для столбца в datagrid. Например, я позволяю пользователю добавлять новые строки в DataGrid. Следовательно, в нижней части DataGrid всегда есть пустая строка, для которой пользователь должен добавлять данные. Я надеялся получить значение по умолчанию для столбца в этой строке. Есть ли способ достичь этой функциональности? Благодаря!Значение по умолчанию для столбца Datagrid WPF

+0

Что такое itemssource вашего DataGrid? –

+0

Элементы столбцов itemssource являются наблюдаемым цветом

ответ

2

Скажем ItemsSource вашей DataGrid является сбор SomeClass и вы показываете разные Properties из SomeClass в DataGrid Столбцы. Что вы можете сделать, так это в конструкторе по умолчанию 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(); 
    } 
} 

Если вам нужна привязка TwoWay, вам придется использовать 2 элемента в DataTemplate. Один для пустого ряда, второй для регулярных строк с привязкой twoway. Установите привязку видимости, чтобы скрыть первый элемент для регулярных строк и второй элемент для пустой строки.

Помните, если вы определите Путь к некоторому свойству объекта коллекции, он не будет поднимать ValueConverter в пустую строку.

Смежные вопросы