我有类似订单表绑定到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>
有没有办法在订单日期已过期的行中禁用编辑模式?
答案 0 :(得分:11)
所以似乎一切正常但您需要一种方法来检查(order_date&gt; current_date)在Trigger中?如果是这种情况,您可以像DateExpiredConverter一样编写一个ValueConverter并检查那里的条件并返回一个布尔值。
转换器类可能如下所示:
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>
我没有测试过这段代码,但它应该非常接近你所需要的。