当前位置: 首页 > 知识库问答 >
问题:

未能在IEventAggregator中重新设置DelegateCommand?

许焕
2023-03-14

假设:

public DelegateCommand Cmd { get; private set; }

public ViewModel(IEventAggregtor ea)
{
    _ea = ea;

    Cmd = new DelegateCommand(() => Console.WriteLine("old!!"));

    ea.GetEvent<TestEvent>().Subscribe(() => NewingCmd());
}

private void NewingCmd()
{
    Cmd = new DelegateCommand(() => Console.WriteLine("new!!"));
}

预期:在事件发布之前,输出为“old!!”,而在发布之后,也意味着newingcmd,输出为“new!!”。

但是在newingcmd之前和之后,输出都是“old!!”。

那么,当我收到发布时,我可以更改delegateCommand吗?

共有1个答案

苗阳文
2023-03-14

您没有实现inotifypropertychanged,因此当将新的delegateCommand分配给cmd时,绑定不会收到更改通知,也不会更新。只需从Prism的bindablebase派生,如下所示。请参见文档中的实现INotifyPropertyChanged。

public class ViewModel : BindableBase
{
   private DelegateCommand _cmd;

   public DelegateCommand Cmd
   {
      get => _cmd;
      private set => SetProperty(ref _cmd, value);
   }

   public ViewModel(IEventAggregtor ea)
   {
      _ea = ea;

      Cmd = new DelegateCommand(() => Console.WriteLine("old!!"));

      ea.GetEvent<TestEvent>().Subscribe(() => NewingCmd());
   }

   private void NewingCmd()
   {
      Cmd = new DelegateCommand(() => Console.WriteLine("new!!"));
   }
}
 类似资料:
  • 我在尝试运行我的代码时遇到了这个错误,这是一个简单的javafx代码来加载一个fxml文件,我尝试了我在这里找到的解决方案,但没有一个对我有效。很抱歉,如果格式不是很好,这是我在这里的第一个帖子,并且很抱歉,如果我在屠杀语言,英语不是我的第一语言。提前道谢! 这是事情的组织方式

  • 我用Inno Setup做了一个安装程序,在一些文件运行后我需要重启电脑,所以我用了这篇文章中的解决方案。 inno安装示例“CodePrepareToInstall”。iss运行良好,所以我使用了代码进行测试安装,但计算机重新启动后安装程序无法启动。 两个安装程序(inno demo和我的测试)都在“HKLM\Software\Microsoft\Windows\CurrentVersion\R

  • 我正在使用: SpringBoot 2.0.4 ActiveMQ 5.15.5 Apache Camel 2.22.0 Java1.8 太棒了 马文 基本上,我有一个带有Apache Camel路由的SpringBoot应用程序,它使用来自ActiveMQ的消息和事务。我需要在ActiveMQ上设置一个Re的策略,所以当处理中发生错误时,消息会被重试多次。 我已经用bean为ActiveMQ创建了

  • 我使用HttpClient发出请求,在每个请求上我都设置了头,但当我看到chrome网络选项卡时,这些头并没有设置。 密码 网络选项卡图像

  • 当我开始在uitextfield中输入时,我希望发生一些动画,在我完成输入之前,它不应该反转回来。我正在使用此代码设置动画: 我想做的是:当我开始在第一个文本字段中键入时,我希望第二个文本字段从视图中隐藏,当我完成键入时,我希望它重新设置动画。 我的问题是:当我开始键入动画时,它会返回到原始位置。它不会等我完成打字。

  • 我在JavaFx应用程序中有一个名为choiceBoxPizza的ChoiceBox。 在我的控制器中,我声明它: 我包含一些测试数据的函数是: 所以应该用填充。奇怪的是,我没有得到任何异常,并且选择框在调用方法后仍然为空。 我的逻辑有错误吗?