0
    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。显然这可以解决,但我想知道我是否做错了什么。

4

1 回答 1

1

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

NotifyOfPropertyChange(() => CanAddAllToProfile);

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

于 2011-05-11T17:40:36.143 回答