使用IValueConverter绑定IsReadOnly

时间:2013-11-04 21:12:31

标签: c# wpf data-binding

也许我误解了如何使用IValueConverter或数据绑定(很可能),但我目前正在尝试根据字符串的值设置DataGridTextColumn的IsReadOnly属性。这是XAML:

<DataGridTextColumn Binding="{Binding Path=GroupDescription}" Header="Name"
                    IsReadOnly="{Binding Current,
                                 Converter={StaticResource currentConverter}}"/>

这是我的转换器:

public class CurrentConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string s = value as string;
        if (s == "Current")
        {
            return false;
        }
        else
        {
            return true;
        }
    }

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

目前,该列始终可编辑,转换器似乎什么都不做。有没有人想过为什么会发生这种情况?

2 个答案:

答案 0 :(得分:0)

您可以使用DataTrigger启用\ disable DataGridCell

,而不是使用转换器
<DataGridTextColumn Header="Name" Binding="{Binding GroupDescription}">
    <DataGridTextColumn.CellStyle>
        <Style TargetType="DataGridCell">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Current}" Value="Current">
                    <Setter Property="TextBlock.IsEnabled" Value="False" />                                    
                </DataTrigger>                              
            </Style.Triggers>
        </Style>                       
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>

答案 1 :(得分:0)

DataGridTextColumn的 IsReadOnly 属性的值是一个影响所有单元格的全局值。单个单元格没有自己的 IsReadOnly 属性。 尝试创建自己的 DependencyProperty ,如下所示:http://blog.spencen.com/2009/04/25/readonly-rows-and-cells-in-a-datagrid.aspx