是否可以将网格属性(行定义,列定义,行距,列距等)绑定到ViewModel?
答案 0 :(得分:1)
查看源代码总是有帮助的:https://github.com/xamarin/Xamarin.Forms/blob/master/Xamarin.Forms.Core/Grid.cs#L20
因此,看起来行定义,列定义,行间距,列间距是可绑定的属性,如代码所示:
public static readonly BindableProperty RowSpacingProperty = BindableProperty.Create("RowSpacing", ...);
public static readonly BindableProperty ColumnSpacingProperty = BindableProperty.Create("ColumnSpacing", ...);
public static readonly BindableProperty ColumnDefinitionsProperty = BindableProperty.Create("ColumnDefinitions", ...);
public static readonly BindableProperty RowDefinitionsProperty = BindableProperty.Create("RowDefinitions", ...);
更新:因此,需要执行以下操作才能使绑定生效:
如果使用Bindings Value Converter,请确保它永远不会返回null。
然后,通过将Grid的TargetNullValue
和FallbackValue
分配给一个空的Row / ColumnDefinitionCollection(例如,使用StaticResource)来防止任何绑定解析。
为此,请首先创建一个static resource,它只是App.xaml中的Row / ColumnDefinitionCollection:
<Application.Resources>
<ResourceDictionary>
<RowDefinitionCollection x:Key="NullRowDefs" />
<ColumnDefinitionCollection x:Key="NullColDefs" />
</ResourceDictionary>
</Application.Resources>
然后将Grid的TargetNullValue
和FallbackValue
属性设置为上述静态资源:
<Grid RowDefinitions="{Binding RowSize, TargetNullValue={StaticResource NullRowDefs}, FallbackValue={StaticResource NullRowDefs}}"
ColumnDefinitions="{Binding ColumnSize, TargetNullValue={StaticResource NullColDefs}, FallbackValue={StaticResource NullColDefs}}"
x:Name="grid">
执行上述操作将解决ArgumentException
。
更新:此绑定应在不提供TargetNullValue
和FallbackValue
的情况下起作用。已发现一个bug,并创建了一个PR,因此应在即将发布的版本中对此进行修复,但与此同时,请使用变通方法。