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

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 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振