MAUI XAML中能否绑定整数资源?如何实现集合视图内按钮宽度绑定至父视图模型属性?
MAUI XAML中能否绑定整数资源?如何实现集合视图内按钮宽度绑定至父视图模型属性?
嘿,我明白你的困扰啦——在CollectionView的ItemTemplate里,每个控件默认绑定的是集合里的单个对象,确实没法直接拿到父ViewModel里的TableWidth属性。你尝试用整数资源绑定的思路没问题,但可惜XAML里值类型(比如Int32)确实不支持直接设置绑定作为内容,所以才会出现那个报错。
不过别担心,有两种更直接的方法能解决这个问题:
方法一:使用RelativeSource绑定父级上下文
你可以通过RelativeSource让Button直接绑定到CollectionView的BindingContext(也就是你的父ViewModel),这样就能获取到TableWidth属性了。修改Button的WidthRequest绑定如下:
<Button Text="{Binding Adjacent}" Command="{Binding TileChangedCommand}" CommandParameter="{Binding}" IsEnabled="{Binding IsEnabled}" BackgroundColor="Grey" HeightRequest="{Binding TableHeight}" WidthRequest="{Binding BindingContext.TableWidth, Source={RelativeSource AncestorType={x:Type CollectionView}}}" CornerRadius="0" Padding="0"/>
这里的RelativeSource AncestorType={x:Type CollectionView}会找到当前Button所在的CollectionView,然后访问它的BindingContext(也就是包含Table和TableWidth的ViewModel),这样就能正确绑定到目标属性了。
方法二:使用ElementName绑定(需注意作用域)
如果你给CollectionView起一个名称,也可以通过ElementName来绑定:
<CollectionView x:Name="MyTableCollectionView" ItemsSource="{Binding Table}" HorizontalOptions="CenterAndExpand"> <!-- 其他代码不变 --> <CollectionView.ItemTemplate> <DataTemplate> <Button <!-- 其他属性不变 --> WidthRequest="{Binding BindingContext.TableWidth, ElementName=MyTableCollectionView}" /> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView>
不过这种方法在某些复杂的布局嵌套里可能会出现作用域识别问题,相比之下第一种RelativeSource的方式兼容性更好。
总结一下:你没法直接给Int32资源绑定值,但通过上面两种绑定父级上下文的方法,就能轻松实现ItemTemplate里的控件绑定到父ViewModel的属性啦。
备注:内容来源于stack exchange,提问作者L0c1l0kk
相关产品推荐
相关产品推荐

