You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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.Mvvm NuGet包
  • 确保ViewModel类标记为partial,且项目语言版本支持C# 9.0+(可在项目属性中设置为最新)

内容的提问来源于stack exchange,提问作者wpf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 20:40:43