使用CommunityToolkit.Mvvm生成的OnSelectionChanged命令为何失效?
问题解决:OnSelectionChangedCommand 无法生效的原因及修复方法
核心原因
你的代码中ClickCommand能正常工作,但OnSelectionChangedCommand失效,大概率是因为方法名以On开头时,虽然[RelayCommand]特性默认会生成OnXXXCommand格式的命令属性,但可能存在隐性的绑定识别问题,或者源代码生成环节的细微异常。
修复方案
方案1:修改方法名(推荐)
避免使用On作为命令方法的前缀,直接调整方法名,让生成的命令名更简洁且无冲突:
public partial class ViewModel : ObservableObject { [ObservableProperty] private string firstName = "Kevin"; [RelayCommand] // 去掉On前缀,改为SelectionChanged private void SelectionChanged() { FirstName = "David"; } [RelayCommand] private void Click() { FirstName = "David"; } }
对应的XAML绑定修改为:
<Button Content="Click Me" Command="{Binding SelectionChangedCommand}"/>
方案2:显式指定命令名称
通过[RelayCommand]特性的Name参数,强制指定生成的命令属性名,确保和XAML绑定的名称完全匹配:
[RelayCommand(Name = "OnSelectionChangedCommand")] private void OnSelectionChanged() { FirstName = "David"; }
XAML绑定保持不变即可。
方案3:检查源代码生成有效性
如果上述方案都无效,需确认CommunityToolkit.Mvvm的源代码生成是否正常工作:
- 查看项目
obj文件夹下生成的ViewModel.g.cs文件,确认是否存在public IRelayCommand OnSelectionChangedCommand { get; }属性 - 确保项目已正确安装
CommunityToolkit.MvvmNuGet包 - 确保ViewModel类标记为
partial,且项目语言版本支持C# 9.0+(可在项目属性中设置为最新)
内容的提问来源于stack exchange,提问作者wpf
相关产品推荐
相关产品推荐

