![](/img/trans.png)
[英]MultiBinding and IMultiValueConverter.Can't get working
[英]WPF MultiBinding and IMultiValueConverter makes a boolean operation
我想用 MultiBinding 和 IMultiValueConverter 創建一個布爾值 OR。 不幸的是,傳遞給轉換器的值總是未設置。
第一個觸發器“TriggerStyle”工作正常。 根據“KeyPlugged”值啟用/禁用按鈕。
多重觸發“EnableTriggerStyle”不起作用。 在“BoolTestConverter”類中,值數組設置為 2 個對象,但
values.Length = 2
values[0]=DependencyProperty.UnsetValue
values[1]=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();
}
}
謝謝你。
每次設置屬性/值時,都會觸發多重綁定。 第一次觸發時,沒有任何值被綁定(Unset) 。 所以轉換器被多次觸發。
你不應該拋出異常。 而是返回 return Binding.DoNothing 否則應用程序將中斷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.