Can';t将VM中的类绑定到WPF中的视图
我有一个类,它表示UI上某些控件的当前状态,具体取决于用户操作的情况: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;
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); }
}