MAUI中CollectionView如何绑定ItemsSource外的ViewModel属性?
MAUI CollectionView 跨上下文绑定解决方案
你遇到的问题核心是:ItemTemplate内的默认数据上下文是单个Receipt对象,而你要绑定的是ViewModel层级的Expense.ExpenseReport.Status属性,必须明确指定绑定数据源,跳出当前Item的上下文。
下面是两种可行的绑定语法:
方法1:通过RelativeSource向上查找CollectionView的BindingContext
CollectionView的BindingContext就是你的ViewModel,通过RelativeSource指定祖先类型为CollectionView,即可访问其BindingContext下的目标属性:
<Button x:Name="cmdDelete" IsEnabled="{Binding BindingContext.Expense.ExpenseReport.Status, RelativeSource={RelativeSource AncestorType={x:Type CollectionView}}}" />
方法2:通过页面引用直接绑定ViewModel
先给页面根元素设置一个x:Name(比如x:Name="CurrentPage"),然后直接引用页面的BindingContext:
<!-- 页面根元素添加x:Name --> <ContentPage x:Name="CurrentPage" ...> <CollectionView ItemsSource="{Binding Receipts}"> <CollectionView.ItemTemplate> <DataTemplate> <Button x:Name="cmdDelete" IsEnabled="{Binding Expense.ExpenseReport.Status, Source={x:Reference CurrentPage}}" /> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> </ContentPage>
额外注意
如果ExpenseReport.Status不是布尔类型(比如是枚举值),你需要实现一个IValueConverter,将状态值转换为bool类型后,才能正确绑定到IsEnabled属性。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

