绑定到Xamarin表单FlexLayout.Basis
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了绑定到Xamarin表单FlexLayout.Basis相关的知识,希望对你有一定的参考价值。
我在我的Xamarin.Forms应用程序中有一个页面,我试图将相对大小(25%,50%等)绑定到FlexLayout中项目的基础,但无法使其成功运行。
我的XAML:
...
<FlexLayout x:Name="Flex"
BindableLayout.ItemsSource="{Binding Path=SelectedSideBarItem.Items}"
AlignItems="Start"
JustifyContent="Start"
Direction="Row"
AlignContent="Start"
Wrap="Wrap">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Button FlexLayout.Basis="{Binding ItemBasis}"
Title="{Binding Name}"/>
</DataTemplate>
</BindableLayout.ItemTemplate>
</FlexLayout>
...
我似乎无法找到任何示例,文档似乎没有提及从视图模型绑定到Basis属性的任何内容。我最初的尝试是尝试将字符串绑定到FlexLayout.Basis。像这样:
...
private string _itemBasis;
public string ItemBasis
{
get => _itemBasis;
set
{
_itemBasis = value;
OnPropertyChanged(nameof(ItemBasis));
}
}
...
public void SetBasis()
{
ItemBasis = "25%"; // or any other percentage.
// Does not work!
}
...
以上不起作用。似乎从未设置基础,因此使用默认值。
我应该注意,当使用绝对大小(250,500等)时,绑定到基础确实有效(即它不是我的绑定的问题)。像这样:
...
private int_itemBasis;
public int ItemBasis
{
get => _itemBasis;
set
{
_itemBasis = value;
OnPropertyChanged(nameof(ItemBasis));
}
}
...
public void SetBasis()
{
ItemBasis = 250; // or any other absolute value.
// Works!
}
...
任何指导都将不胜感激。
谢谢!
通过绑定设置值时不调用XAML TypeConverters,因此当您尝试绑定字符串“25%”时,不会应用default FlexBasis TypeConverter。
幸运的是FlexBasisTypeConverter
类是公共的,所以你可以在你自己的转换器类中使用它,如下所示:
public class StringToFlexBasisConverter: IValueConverter
{
private readonly FlexBasis.FlexBasisTypeConverter _converter = new FlexBasis.FlexBasisTypeConverter();
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is string stringValue)
{
return _converter.ConvertFromInvariantString(stringValue);
}
return new FlexBasis();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Basis
属性的类型是FlexBasis
https://github.com/xamarin/Xamarin.Forms/blob/bd31e1e9fc8b2f9ad94cc99e0c7ab058174821f3/Xamarin.Forms.Core/FlexEnums.cs#L58
如果将它绑定到字符串则不起作用(除非使用转换器)。尝试将您的可绑定属性修改为FlexBasis
并分配如下值:
ItemBasis = new FlexBasis(.5f, true);
第一个参数是长度,第二个参数是“相对”标志。将其设置为true
意味着您使用的是百分比值。
以上是关于绑定到Xamarin表单FlexLayout.Basis的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xamarin 表单中将数组绑定到 ListView