2012-05-29 3 views
0

У меня есть DataGrid с 4 столбцами, первые два из них привязаны к объекту. Остальные две кнопки колонны сделаны как этотОтключить кнопку в нижней строке в wpf datagrid

<DataGridTemplateColumn MaxWidth="100" Header="Delete"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Button Name="BtnDelete" CommandParameter="{Binding Path=Id}" Content="Delete" Click="BtnDeleteEmployee_Click" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

Мой Datagrid имеет CanUserAddRows = «True», который всегда генерирует пустую строку в нижней части сетки. Однако я хотел бы, чтобы две кнопки в нижней строке были отключены до тех пор, пока не будут заполнены другие строки. Как и сейчас, я (конечно) получаю исключение nullreference, когда я нажимаю кнопку.

Я думаю, решение было бы связать баттона IsEnabled свойство

id>0 

Но как это сделать, я не уверен.

ответ

1

Одним из способов достижения этого является привязать свойство IsEnabled к свойству Id и использовать ValueConverter для повторной установки True или False на основе ваших критериев.

преобразователь значение может выглядеть следующим образом:

public class IdToEnabledConverter:IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
    return value != null && (int)value > 0; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
    throw new NotImplementedException(); 
    } 
} 

и вы ссылаетесь его в разделе ресурсов:

<Grid.Resources> 
    <local:IdToEnabledConverter x:Key="IdToEnabledConverter"/> 
</Grid.Resources> 

И связывают IsEnabled свойство:

<Button IsEnabled="{Binding Id, Converter={StaticResource IdToEnabledConverter}}"/> 
+0

Вы можете уточнить Литта пожалуйста? - Я новичок в WPF –

+0

Я думаю, что это была хорошая идея, но всякий раз, когда я пытаюсь редактировать ячейку в автогенерированной строке, я получаю InvalidCastException. Msgstr "Указанный сброс недействителен." –

+0

Вероятно, вы должны проверить нулевые значения. Ответ обновлен. –

1

я предлагаю используя шаблон MVVM и команды. Если вы используете команды с кнопкой, она будет автоматически отключена на основе возвращаемого значения CanExecute(). Итак, это место, где вы можете проверить, id> 0.

полезной информация о командах: http://relentlessdevelopment.wordpress.com/2010/03/30/simplified-mvvm-commanding-with-delegatecommand/

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