大白莎 2024-03-07 18:50 采纳率: 60%
浏览 14

MvvmLight的RelayCommand不生效,无法进入Modify()函数,如何解决?(标签-前端)

MvvmLight的RelayCommand不生效,无法进入Modify()函数

前端按钮命令

    <Grid Grid.Row="5" Height="40">
            <Button Width="70" Margin="310,0,0,0" VerticalAlignment="Center" Command="{Binding ModifyCommand }" Content="确定"></Button>
        </Grid>

后端命令实现

  class GongChengViewModel : ViewModelBase
    {
        public GongChengViewModel()
        {
            ModifyCommand = new RelayCommand(Modify);
        }
        public RelayCommand ModifyCommand { get; set; }
        public void Modify()
        {
            MessageBox.Show("1111111");
            //GongCheng GongCheng1 = new GongCheng();
        }
    }

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-07 18:50
    关注

    引自免费微信小程序:皆我百晓生

    在使用MvvmLight的RelayCommand时,如果按钮点击后无法触发Modify()函数,可能是由于以下原因:

    1. 数据上下文未正确设置:确保你的XAML文件中的DataContext已绑定到GongChengViewModel实例。若没有正确设置,命令将无法找到其关联的方法。例如,在窗口或用户控件的代码后置中设置DataContext:
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new GongChengViewModel();
        }
    }
    
    1. ViewModelBase和RelayCommand引用问题:请确认已正确引用了MvvmLight库,并且ViewModel类继承自GalaSoft.MvvmLight.ViewModelBase。

    2. RelayCommand构造函数参数:虽然您给出的代码片段中Modify方法不需要任何参数,但RelayCommand也可以用于接收参数。如果Modify方法需要参数,请确保创建RelayCommand时传递正确的委托类型。

    3. UI线程更新:如果Modify方法内部进行了UI操作,要确保在UI线程上执行。尽管在这个例子中并未体现出来,但在实际项目中可能会遇到此类问题。

    4. 命令执行状态:默认情况下,RelayCommand不检查CanExecute状态,但如果在其他地方设置了RaiseCanExecuteChanged,可能会影响到命令执行。检查是否在不应该禁用命令的时候调用了这个方法。

    鉴于您的代码片段,目前来看主要问题是DataContext是否正确设置。如果您已经确认了上述所有情况,仍然无法生效,请尝试添加一个日志输出或其他形式的调试手段,以验证Modify方法是否真正未被调用。同时,您可以尝试在ViewModel构造函数中添加对RelayCommand的CanExecute初始状态的设置,如下所示(尽管在这种情况下不是必需的):

    class GongChengViewModel : ViewModelBase
    {
        public GongChengViewModel()
        {
            ModifyCommand = new RelayCommand(Modify, () => true); // 设置CanExecute始终为true
        }
    
        public RelayCommand ModifyCommand { get; set; }
    
        public void Modify()
        {
            MessageBox.Show("1111111");
            // GongCheng GongCheng1 = new GongCheng();
        }
    }
    

    最后,查看XAML文件中是否有任何可能导致命令失效的其他绑定错误,比如命名空间引用、属性绑定语法等。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月7日

悬赏问题

  • ¥15 C# wpf 软年 卸载有残留 webview2
  • ¥15 求代写matlab解决柔性调度代码,价格私
  • ¥15 为什么安装Anaconda时报系统找不到指定文件?
  • ¥15 如何将这个项目的ssh-TCP,改成ssh3-UDP协议
  • ¥20 ic卡dump文件校检码解密
  • ¥15 关于:接收到的数据不是有效的JSON格式
  • ¥15 apdl语言如何增加受力分析
  • ¥15 算法对比:学校优化算法与蚁群算法对比
  • ¥15 机电一体化系统设计说明书
  • ¥20 sgy数据提取地震波速,有人能回答吗小馋