您能否建议一种优雅的方法来检查视图上的数据是否已被修改以相应地启用“保存”按钮?
谢谢。
假设您将 MVVM 与 Caliburn.micro 一起使用,则有一个 Can-convention 命令。因此,假设您想在名为 Username 的字符串属性非空时启用 Save 按钮,您只需将此方法添加到视图模型:
public bool CanSave()
{
if(String.IsNullOrEmpty(UserName))
return false;
return true;
}
假设您的类继承了 PropertyChangedBase 或 Screen,并且您有一个 Name="Save" 的按钮,如果 UserName 为空,它将被禁用。如果您对视图中的数据更改感兴趣,则相关属性(在此示例中为 UserName)当然必须绑定到视图中的某个输入区域 - 例如,您可以有一个名为 UserName 的 TextBox,这将使 Caliburn 设置约定俗成的约束。
整个类将如下所示:
编辑为只允许保存实际不同的数据
public class UserViewModel : PropertyChangedBase
{
private string _savedUserName;
public string UserName{ get; set; }
public bool CanSave()
{
return !UserName.Equals(_savedUserName);
}
public void Save()
{
//Save the data
_savedUserName = UserName;
}
}