我想用MultiBinding和IMultiValueConverter来做布尔OR。不幸的是,传递给转换器的值总是未设置的。
values.Length =2
values=DependencyProperty.UnsetValue
values1=DependencyProperty.UnsetValue
XAML文件:
<Window.Resources>
<local:BoolTestConverter x:Key="BoolTestConverter"></local:BoolTestConverter>
<Style x:Key="TriggerStyle" TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=KeyPlugged}" Value="false">
<Setter Property="Button.IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
<Style x:Key="EnableTriggerStyle" TargetType="Button">
<Style.Triggers>
<DataTrigger Value="false">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource BoolTestConverter}">
<Binding Path="KeyPlugged"/>
<Binding Path="KeyOpened"/>
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Button.IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
C#文件:
class BoolTestConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
bool result = false;
if (values.Length > 1)
{
if (values[0] == null || values[0] == DependencyProperty.UnsetValue)
throw new NotImplementedException();
result = System.Convert.ToBoolean(values[0]);
for (int i = 1; i < values.Length; i++)
{
if (values[i] == null || values[i] == DependencyProperty.UnsetValue)
throw new NotImplementedException();
result |= System.Convert.ToBoolean(values[i]);
}
}
else
throw new NotImplementedException();
return result;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
谢谢。
发布于 2021-10-20 06:41:43
每次设置属性/值时,都会触发多绑定。第一次触发时,所有值都不会被绑定(未设置)。所以转换器会被多次触发。
您不应该抛出异常。相反,返回返回Binding.DoNothing,否则应用程序将中断。
https://stackoverflow.com/questions/69637011
复制相似问题