代码之家  ›  专栏  ›  技术社区  ›  TMan

如果正在使用另一个单元格,请禁用DataGridCell

  •  1
  • TMan  · 技术社区  · 12 年前

    在数据网格内的一行中,我试图禁用一个单元格/字段,如果它旁边的单元格正在被使用,反之亦然。换句话说,用户只能输入一个或另一个,如果用户在一个单元格中输入信息,则另一个单元格应被禁用或只读。我怎样才能做到这一点?我能以某种方式创建一个转换器吗?同时,用户应该能够将该单元格清零,以防他无意在该单元格中输入信息。如有任何建议,不胜感激。

     <DataGridTextColoumn Binding="{Binding Property1}" Header="Property1" />
     <DataGridTextColoumn Binding="{Binding Property2}" Header="Property2" />
    

    -所以,如果我在属性1单元格中输入信息,那么我就不能在属性2单元格中输入任何内容。如果我在属性2单元格中输入了一些内容,那么我就不能在属性1单元格中输入任何内容。

    1 回复  |  直到 12 年前
        1
  •  1
  •   Community CDub    8 年前

    转换器可以工作(正如您所提到的)。像这样的

    <Window 
        ...
        xmlns:c="clr-namespace:*YourConverter'sNamespace*"
        ...
        />
    <Window.Resources>
        <c:NotBlankConverter x:Key="NotBlankConverter"/>
    </Window.Resources>
    ...
    <DataGridTextColoumn 
        Binding="{Binding Property1}" 
        Header="Property1" 
        IsReadOnly="{Binding Property2, Converter={StaticResource NotBlankConverter}"
        />
    ...
    

    你的转换器可以看起来像这样

    class NotBlankConverter: IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return string.IsNullOrEmpty(value);
        }
        ...
    }
    

    使现代化

    由于IsReadOnly DP对DataGridTextColumn的工作方式,这似乎实际上不起作用。为了有一个完整的工作解决方案,需要实施这些问题中的一些内容。。。

    .Net v4 DataGridTextColumn.IsReadOnly seems to be faulty

    DataGridTextColumn - How to bind IsReadonly?