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;
...
我正在处理一个新的 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;
...