IsMaskcompleted 有时为空,这是为什么呢?

IsMaskcompleted sometimes is null, why is that?

我正在处理一个新的 WPF 窗体。我正在使用 Extended.Wpf.Toolkit 的 MaskedTextBox。我在 MultiBinding 表达式中使用 IsMaskCompleted 属性。这是 XAML:

<Border Grid.Row="1" 
        Grid.Column="1">
    <Border.BorderThickness>
        <MultiBinding Converter="{StaticResource multiBoolToThicknessConverter}">
            <Binding ElementName="TargetMaskedTextBox, Path=IsMaskCompleted" />
            <Binding Path="IsTargetCompleted" />
        </MultiBinding>
    </Border.BorderThickness>
    <tk:MaskedTextBox x:Name="TargetMaskedTextBox"
                      Style="{StaticResource LeftAlignMaskedTextBoxStyle}"
                      Value="{Binding Target}"
                      IsEnabled="{Binding IsTargetEnabled}"
                      ValueDataType="{x:Type System:Single}"
                      Mask="[=10=].0##" />
</Border>

这是我的 IMultiValueConverter 中的 Convert 方法:

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
    try
    {
        bool? boolOneNullable = values[0] as bool?;
        bool? boolTwoNullable = values[1] as bool?;

        bool boolOne = true;
        bool boolTwo = true;

        if (!boolOneNullable.HasValue)
        {
            boolOne = false;
        }
        else
        {
            boolOne = boolOneNullable.Value;
        }

        if (!boolTwoNullable.HasValue)
        {
            boolTwo = false;
        }
        else
        {
            boolTwo = boolTwoNullable.Value;
        }

        var combinedBools =  boolOne && boolTwo;

        if (combinedBools)
        {
            return new Thickness(0);
        }
        else
        {
            return new Thickness(1);
        }

    }
    catch (Exception)
    {
        return null;
    }
}

我不明白的是,当在填充 MaskedTextBox 控件的数据网格中选择一行时,IsMaskCompleted 通常为 null,即使其中包含有效数据。这是为什么?

您不能假设 属性 在您的 Convert 方法第一次被调用时已经初始化。不久之后将使用实际值再次调用它。

您应该检查是否提供了这些值,简单地说 return 没有:

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
    if (values == null || values.Length < 2 || (values[0] == null && values[1] == null))
        return;
    ...