Can';t将VM中的类绑定到WPF中的视图

Can';t将VM中的类绑定到WPF中的视图,wpf,xaml,mvvm,view,Wpf,Xaml,Mvvm,View,我有一个类,它表示UI上某些控件的当前状态,具体取决于用户操作的情况: public class CanDoAbility { public bool CanAdd { get; set; } public bool CanDelete { get; set; } public bool CanEdit { get; set; } public bool CanCancel { get; set; } public bool CanPrint { get;

我有一个类,它表示UI上某些控件的当前状态,具体取决于用户操作的情况:

public class CanDoAbility
{
    public bool CanAdd { get; set; }
    public bool CanDelete { get; set; }
    public bool CanEdit { get; set; }
    public bool CanCancel { get; set; }
    public bool CanPrint { get; set; }
    public bool CanSave { get; set; }
    public bool CanEditFields { get; set; }

    public CanDoAbility()
    {
        CanAdd = true;
        CanDelete = true;
        CanEdit = true;
        CanCancel = false;
        CanPrint = true;
        CanSave = false;
        CanEditFields = false;
    }
}
然后,我在ViewModel中创建了一个实例,如下所示:

public CanDoAbility ViewCanDoAbility { get; set; }
并在ViewModel构造函数中启动它(我在ViewModel中实现BindableBase):

另外,在ViewModel中,我添加了:

OnPropertyChanged(() => ViewCanDoAbility.CanEditFields);
最后,使用XAML中的绑定将其绑定到UI。作为:

<Button Content="Edit" Command="{Binding UpdateCommand}" IsEnabled="{Binding ViewCanDoAbility.CanEdit}"/>

问题是:

正如我检查的那样,ViewCanDoAbility的值在ViewModel内部发生变化。但是,在视图内部不是。如何解决这个问题,因为我将在我的应用程序的许多视图模型中使用这个类

顺便说一句:
我试图直接在ViewModel中创建相同的属性,但效果很好。

因为您已经从抽象类BindableBase派生,所以只需调用set属性即可。因此,与其使用
public bool CanEdit{get;set;}

在代码中执行此操作并检查其是否工作

private bool canEdit;

public bool CanEdit
{
    get { return canEdit; }    
    set { SetProperty(ref canEdit, value); }
}

我想你错过了ViewCanDoAbility的属性更改。我没有在问题中提到它,但我的代码中确实有。谢谢。我重新编写了CanDoAbility类,它现在正在工作。:)那很好。如果你认为我的答案是正确的,你可以选择它作为正确的答案。
private bool canEdit;

public bool CanEdit
{
    get { return canEdit; }    
    set { SetProperty(ref canEdit, value); }
}