Home > other >  NET MAUI binding elemens of an 2D multidimensional
NET MAUI binding elemens of an 2D multidimensional

Time:01-12

what would be the way to bind an element of an 2D multidimensional array in NET MAUI?

I tried to do the following:

<Label Text="{Binding Calendar.MatrixMonth[0,0]}"
                       Style="{StaticResource subTitleLightTextStyle}"
                       Grid.Row="2"
                       HorizontalOptions="Start" />

But that doesn't work, it just shows the error:

No constructor for type 'BindingExtension' has 2 parameters

CodePudding user response:

It seams that you are trying to use the Binding markup extension (which only accepts one parameter as the path of property to bind) You need something like x:Bind in UWP's which unfortunately is not yet supported in MAUI out of the box. But there is a library that allows you to do so here. So you can try this code (not tested):

<Label Text="{x:Bind Calendar.MatrixMonth[0,0]}"
                       Style="{StaticResource subTitleLightTextStyle}"
                       Grid.Row="2"
                       HorizontalOptions="Start" />

CodePudding user response:

I cannot find a directly binding way for 2D array. But you could use ValueConverter as an alternative. Try the following code:

In xaml,

//define a value converter
<ContentPage.Resources>
    <local:ArrayToStringConverter x:Key="arrayToStringConverter"/>
</ContentPage.Resources>

...
// for label, consume this converter and pass the parameter "1,1" as index
<Label  FontSize="32" HorizontalOptions="Center" Text="{Binding Calendar.MatrixMonth,
                                Converter={StaticResource arrayToStringConverter},
            ConverterParameter='1,1'}"> 

And you could generate a new file to do value converter:

public class ArrayToStringConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
       var a = value as string[,];
        string p = parameter.ToString();
        var index1 = int.Parse(p.Split(",")[0]);
        var index2 = int.Parse(p.Split(",")[1]);
        return a[index1, index2];
    }
....
}

For more info, you could refer to Binding value converters

Hope it works for you.

  • Related