Wpf 检查屏幕是否被修改的好方法是什么?

Wpf 检查屏幕是否被修改的好方法是什么?,wpf,data-binding,caliburn.micro,Wpf,Data Binding,Caliburn.micro,您能否建议一种优雅的方法来检查视图上的数据是否已被修改以相应地启用“保存”按钮 谢谢。假设您将MVVM与Caliburn.micro一起使用,那么命令有一个Can约定。因此,假设您希望在名为Username的字符串属性为非空时启用Save按钮,只需将此方法添加到viewmodel: public bool CanSave() { if(String.IsNullOrEmpty(UserName)) return false; return true; } 假设

您能否建议一种优雅的方法来检查视图上的数据是否已被修改以相应地启用“保存”按钮


谢谢。

假设您将MVVM与Caliburn.micro一起使用,那么命令有一个Can约定。因此,假设您希望在名为Username的字符串属性为非空时启用Save按钮,只需将此方法添加到viewmodel:

public bool CanSave()
{
    if(String.IsNullOrEmpty(UserName))
        return false;

    return true;
}
假设您的类继承了PropertyChangedBase或Screen,并且您有一个带有Name=“Save”的按钮,那么如果UserName为空,它将被禁用。如果您对视图中的数据更改感兴趣,那么相关属性(在本例中为UserName)当然必须绑定到视图中的某个输入区域-例如,您可以有一个名为UserName的文本框,这将使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;
    }
}

你在说什么屏幕?您正在使用mvvm吗?在mvvm中,它相对简单且优雅。是的,我使用Caliburn.micro,正如你在我的标记中所看到的。你看,如果我编辑了一条记录,并且字段不是空的,我仍然不想保存,除非某些内容已被更改。那么,你必须以某种方式保留原始值,确保当值与保存的版本相同时,“保存”按钮保持禁用状态。我将用一个建议更新我的答案。可能有一种方法可以让它更干净-但本质上你不能逃避这样一个事实:你需要知道持久值是什么,才能知道你是否可以启用按钮。所以你要么保留一份持久值的副本,要么每次都要查询数据存储。我明白,我只是希望Caliburn.Micro内置了一些东西。