【问题标题】:Caliburn Can{Action} not getting updated on Refresh()Caliburn Can{Action} 未在 Refresh() 上更新
【发布时间】:2011-03-09 17:05:00
【问题描述】:
    public void AddProfile()
    {
        //Add conventions for DX Components.
        Profile newProfile = new Profile()
        {
            Description = "New Profile",
            DisplayOrder = decimal.MaxValue,
            IsActive = true,
            IsDefault = false,
            IsSelected = true,
            ProfileId = 0
        };
        EditProfileViewModel profile = new EditProfileViewModel(true) { Profile = newProfile };


        if (windowManager.ShowDialog(profile,null ) ?? false) // ?? means (coallesce so if null use false value) the line means, if dialog returns true...
        {
            Profiles.Add(profile.Profile);
            NotifyOfPropertyChange(string.Empty);
        }

    }

可以添加按钮的代码是这样的。

    public bool CanAddAllToProfile
    {
        get
        {
            var p = Profiles.Where(x => x.IsSelected).FirstOrDefault();
            if (p == null)
                return false;
            if (AvailableModules.Count() == 0)
                return false;
            return true;
        }
    }

    public void AddAllToProfile()
    {
        var p = Profiles.Where(x => x.IsSelected).FirstOrDefault();
        if (p == null)
            return;
        foreach (var m in AvailableModules)
            p.Modules.Add(m);
        NotifyOfPropertyChange(string.Empty);
    }

如果我这样编写代码,CanAddAllToProfile 获取不会被执行。

如果我执行 NotifyOfPropertyChange(() => CanAddAllToProfile) 它会起作用

我也试过 Refresh();

我从 Screen 继承 viewmodel 任何想法我有一堆其他需要执行的 CanExecuteBindings。显然这可以解决,但我想知道我是否做错了什么。

【问题讨论】:

  • 你是如何在 XAML 中进行连接的?点击按钮时 AddAllToProfile() 是否被命中?
  • 这是 Caliburn Micro 还是完整的 Caliburn?
  • 完整的caliburn,是的,当我单击按钮时它会被击中。我只是使用 x:name="AddAllToProfile" 连接它

标签: c# wpf caliburn action


【解决方案1】:

您刚刚在问题中给出了答案:

NotifyOfPropertyChange(() => CanAddAllToProfile);

这是告诉绑定基础结构它应该调用CanAddAllToProfile 并更新绑定到该属性的任何内容(例如名为AddAllToProfile 的按钮)的适当方式。那么,如果它有效,你为什么不这样做呢?

【讨论】:

    猜你喜欢
    • 2012-05-23
    • 2012-08-17
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多