Xamarin.Forms分组CollectionView如何正确绑定CommandParameter
解决Xamarin.Forms分组CollectionView中Item按钮传递GroupedItem对象的问题
要实现点击主体Button时传递GroupedItem对象,有两种可行方案,以下是具体实现:
方案一:给Details类添加父组引用(兼容性更强)
1. 修改Details实体类
新增ParentGroup字段,用于存储当前Details所属的GroupedItem:
public class Details { public string Description { get; set; } public bool IsVisible { get; set; } = true; public GroupedItem ParentGroup { get; set; } // 新增父组引用属性 }
2. 更新GroupedItem构造函数
在创建GroupedItem时,为每个子项的ParentGroup赋值:
public class GroupedItem : List<Details> { public string Title { get; } public Details Form { get; } public GroupedItem(string title, List<Details> form) : base(form) { Title = title; Form = form[0]; // 给每个Details绑定父组 foreach (var detail in form) { detail.ParentGroup = this; } } }
3. 调整XAML中Button的CommandParameter
将按钮的命令参数绑定到ParentGroup:
<Button Padding="0" BackgroundColor="Blue" Command="{Binding BindingContext.BodyButtonCommand, Source={Reference thisPage}}" CommandParameter="{Binding ParentGroup}" HeightRequest="30" HorizontalOptions="Start" Text="Click" TextColor="white" VerticalOptions="Start" />
方案二:通过XAML RelativeSource直接获取父组上下文
无需修改实体类,直接通过RelativeSource向上查找GroupedItem的BindingContext:
<Button Padding="0" BackgroundColor="Blue" Command="{Binding BindingContext.BodyButtonCommand, Source={Reference thisPage}}" <!-- 通过RelativeSource获取父级分组的上下文 --> CommandParameter="{Binding BindingContext, RelativeSource={RelativeSource AncestorType={x:Type CollectionView}}}" HeightRequest="30" HorizontalOptions="Start" Text="Click" TextColor="white" VerticalOptions="Start" />
注:部分Xamarin.Forms版本中,可尝试将AncestorType改为
CollectionViewGroup以更精准匹配分组上下文。
验证ViewModel逻辑
修改完成后,changeBody方法即可正确接收GroupedItem对象:
private void changeBody(object obj) { var clickedGroup = obj as GroupedItem; if (clickedGroup != null) { // 此处编写你的业务逻辑 } }
内容的提问来源于stack exchange,提问作者Ashish
相关产品推荐
相关产品推荐

