.net NET MAUI绑定二维多维元素

nwo49xxi  于 2023-01-14  发布在  .NET
关注(0)|答案(2)|浏览(117)

在NETMAUI中绑定二维多维数组元素的方法是什么?
我试着做了以下几点:

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

但这不起作用,它只显示错误:
类型“BindingExtension”的构造函数都没有2个参数

2ic8powd

2ic8powd1#

看起来你正在尝试使用Binding标记扩展(它只接受一个参数作为绑定属性的路径)你需要像UWP中的x:Bind这样的东西,不幸的是MAUI还不支持它。但是有一个库可以让你这样做here。所以你可以尝试下面的代码(未经测试):

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

pepwfjgg2#

您可以使用ValueConverter绑定2D数组作为替代方法。请尝试以下代码:
在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'}">

你可以生成一个新的文件来做值转换器:

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];
    }
....
}

有关详细信息,请参阅Binding value converters
希望对你有用。

相关问题