禁用DataGridCell如果正在使用其他电池(Disable DataGridCell if a

2019-10-17 03:42发布

在数据网格内一排,我试图禁用电池/场,如果使用它旁边的小区或反之亦然。 换句话说,用户只能输入一个或另一个,如果用户输入信息到一个小区的其他应禁用或只读或东西。 我怎样才能做到这一点? 我能以某种方式创建一个转换器? 同时,用户应该能够零出该小区的情况下,他并不想进入该小区信息。 任何意见是非常赞赏。

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

- 所以,如果我输入信息时,property1细胞的话,我应该无法输入任何内容到property2细胞。 如果我输入内容property2细胞,然后我不应该能够输入任何内容到property1细胞。

Answer 1:

A转换器可以工作(如你所提到的)。 像这样的事情

<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似乎是错误的

DataGridTextColumn -如何绑定IsReadonly?



文章来源: Disable DataGridCell if another cell is being used