WPF datagrid: отключить редактирование в определенных строках
у меня есть что-то вроде стола заказов привязываются к DataGrid
.
Я хочу отключить редактирование строк, где дата заказа истекла (дата крайнего срока > текущая дата): показать их серыми и запретить вход в режим редактирования.
вот что у меня есть:
<Style TargetType="{x:Type WPFToolkit:DataGridRow}">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<!-- ??? order_date > current_date -->
<!-- some other condition - already works -->
</MultiTrigger.Conditions>
<Setter Property="IsEnabled" Value="False"/>
<Setter Property="Foreground" Value="LightGray"/>
</MultiTrigger>
</Style.Triggers>
</Style>
дата заказа-это столбец шаблона определяется следующим образом:
<WPFToolkit:DataGridTemplateColumn SortMemberPath="order_date" Header="Deadline" >
<WPFToolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=order_date,
ConverterCulture='ru-RU', StringFormat='{}{0:d}'}" />
</DataTemplate>
</WPFToolkit:DataGridTemplateColumn.CellTemplate>
<WPFToolkit:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<WPFToolkit:DatePicker SelectedDate="{Binding Path=order_date}" />
</DataTemplate>
</WPFToolkit:DataGridTemplateColumn.CellEditingTemplate>
</WPFToolkit:DataGridTemplateColumn>
есть ли способ отключить режим редактирования в строках, где дата заказа истекла?
1 ответов
Кажется, что все работает, но вам нужен способ проверить (order_date > current_date) в триггере? Если это так, вы можете написать ValueConverter как, возможно, DateExpiredConverter и проверить условие там и вернуть логическое значение.
класс конвертера может выглядеть примерно так:
public class DateExpiredConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
DateTime order_date = (DateTime)value;
if (order_date > System.DateTime.Now)
{
return true;
}
else
{
return false;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new Exception("The method or operation is not implemented.");
}
}
затем в своем триггере вы делаете что-то вроде этого:
<Style TargetType="{x:Type WPFToolkit:DataGridRow}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=order_date, Converter={StaticResource DateExpiredConverter}}" Value="True">
<Setter Property="IsEnabled" Value="False"/>
<Setter Property="Foreground" Value="LightGray"/>
</DataTrigger>
</Style.Triggers>
</Style>
Я не тестировал этот код, но он должен быть довольно близок к тому, что вы необходимость.