【问题标题】:WPF datagrid: disable editing in certain rowsWPF datagrid:禁用某些行中的编辑
【发布时间】: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>

有没有办法在订单日期已过期的行中禁用编辑模式?

【问题讨论】:

标签: wpf xaml datagrid wpfdatagrid editing


【解决方案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 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-23
  • 2011-10-09
  • 2011-07-11
  • 1970-01-01
  • 2011-12-05
  • 2012-10-04
  • 2012-10-18
相关资源
最近更新 更多