.NET MAUI相对绑定报错:Property...not found on System.String
.NET MAUI 中 SwipeItem 绑定 ViewModel 命令失败的解决方案
问题原因
报错 Binding: Property "DeleteCommand" not found on "System.String" 的核心原因是:DataTemplate 的默认绑定上下文是集合中的单个字符串项,你尝试用 RelativeSource AncestorType={x:Type viewmodel:MainViewModel} 查找 ViewModel,但 MainViewModel 不属于 Visual Tree 中的元素,无法通过这种方式定位,导致绑定仍在当前字符串上下文中查找 DeleteCommand,自然找不到对应属性。
修复方案
有两种可靠的方式可以正确绑定到页面的 ViewModel 命令:
方案1:使用 x:Reference 直接引用页面
利用页面已定义的 x:Name="mainPageRef",直接绑定到页面的 BindingContext(即 MainViewModel):
<SwipeItem Text="Delete" BackgroundColor="Red" Command="{Binding BindingContext.DeleteCommand, Source={x:Reference mainPageRef}}" CommandParameter="{Binding .}"/>
方案2:通过 RelativeSource 查找父级 ContentPage
在 Visual Tree 中定位到页面本身,再绑定其 BindingContext:
<SwipeItem Text="Delete" BackgroundColor="Red" Command="{Binding BindingContext.DeleteCommand, Source={RelativeSource AncestorType={x:Type ContentPage}}}" CommandParameter="{Binding .}"/>
验证你的 ViewModel 代码
你的 MainViewModel 中 Delete 命令的实现是正确的:
[RelayCommand]特性会自动生成DeleteCommand属性- 命令参数
string s与CommandParameter="{Binding .}"传递的字符串项匹配,能正确执行删除逻辑
内容的提问来源于stack exchange,提问作者Dostonbek Islambekov
相关产品推荐
相关产品推荐

