簡體   English   中英

在 .net MAUI 中的一個綁定上使用轉換器進行多重綁定

[英]Multibinding with converter on one of the bindings in .net MAUI

我的問題是,當我在多重綁定的綁定之一上使用轉換器時。 它不會向轉換器發送正確的內容。 根據使用 IMultiValueConverter 中的 DOC( https://learn.microsoft.com/en-us/do.net/maui/fundamentals/data-binding/multibinding?view.net-maui-7.0 ),它應該可以工作,所以我不知道我做錯了什么......

我的多重綁定 class 如下:

public class BooleanAndConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (values == null || !targetType.IsAssignableFrom(typeof(bool)))
        {
            return false;
        }

        foreach (var value in values)
        {
            if (!(value is bool b))
            {
                return false;
                
            }
            else if (!b)
            {
                return false;
            }
        }
        return true;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

我有一個 Boolean 逆變器 class 如下:

public class InverseBooleanConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (targetType != typeof(bool))
            throw new InvalidOperationException("The target must be a boolean");

        return !(bool)value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
         throw new NotSupportedException();
    }
}

然后在我的 XAML 中,我像這樣使用它:

<Button Text="Passer à la ronde suivante" Command="{Binding NextRoundCommand}">
    <Button.IsVisible>
        <MultiBinding Converter="{StaticResource BooleanAndConverter}">
            <Binding Path="isGameStarted"/>
            <Binding Path="isPlayersPlaying" Converter="{StaticResource InvertedBoolConverter}"/>
        </MultiBinding>
    </Button.IsVisible>
</Button>

當在多重綁定中調用逆變器轉換器時,它接收的不是布爾型 TagetType,而是“System.object”,因此它會拋出 InvalidOperationException。 為什么在使用普通綁定時它會收到 bool 的目標類型,而在多重綁定中卻不會?

謝謝

我看不到其他代碼,但我測試了示例代碼DataBindingDemos ,它在我這邊有效。

但我發現你沒有為你的兩個( BooleanAndConverterInverseBooleanConverter )實現 function ConvertBack

您可以參考以下代碼:

 public class InverterConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            bool? b = value as bool?;
            if (b == null)
            {
                return false;
            }
            return !b.Value;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return Convert(value, targetType, parameter, culture);
        }
    }

public class AllTrueMultiConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (values == null || !targetType.IsAssignableFrom(typeof(bool)))
        {
            return false;
            // Alternatively, return BindableProperty.UnsetValue to use the binding FallbackValue
        }

        foreach (var value in values)
        {
            if (!(value is bool b))
            {
                return false;
                // Alternatively, return BindableProperty.UnsetValue to use the binding FallbackValue
            }
            else if (!b)
            {
                return false;
            }
        }
        return true;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        if (!(value is bool b) || targetTypes.Any(t => !t.IsAssignableFrom(typeof(bool))))
        {
            // Return null to indicate conversion back is not possible
            return null;
        }

        if (b)
        {
            return targetTypes.Select(t => (object)true).ToArray();
        }
        else
        {
            // Can't convert back from false because of ambiguity
            return null;
        }
    }
}

更多信息,您可以查看: AllTrueMultiConverter.csInverterConverter.cs

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM