WPF datagrid:禁用某些行中的编辑
Posted
技术标签:
【中文标题】WPF datagrid:禁用某些行中的编辑【英文标题】:WPF datagrid: disable editing in certain rows 【发布时间】:2010-12-27 15:02:56 【问题描述】:我有类似订单表绑定到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>
有没有办法在订单日期已过期的行中禁用编辑模式?
【问题讨论】:
相关:***.com/questions/2030143/… 【参考方案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>
我还没有测试过这段代码,但它应该非常接近您的需要。
【讨论】:
谢谢!你拯救了我的一天。返回 order_date > DateTime.Now ;)以上是关于WPF datagrid:禁用某些行中的编辑的主要内容,如果未能解决你的问题,请参考以下文章
wpf datagrid中如何获取选中行中模板如textbox,combobox的内容