WPF 在界面修改控件值后变为待保存状态

38656888 2018-12-26 11:26:28
WPF,一个窗体(window usercontrol等)内,有几个Textbox或者CheckBox,当在界面改变了值时如何知道,当焦点离开了这个窗体之后,要有提示,像文本文档打开后,更改了,想要关闭时的那样有提示保存
...全文
638 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
在ViewModel声明一个标识VM状态的属性,用来表明View的操作状态,控件值的改变时去修改这个属性,进而在保存操作时去判断这个属性即可。
  • 打赏
  • 举报
回复
可能你会定义为
public bool Dirty { get; private set; }
避免被 VM 对象外部的客户代码修改 Dirty 状态。也许你的 Dirty 会抛出事件通知,从而你的 xaml 上就能在界面视图用什么 UI 形式来实时表现 Dirty 指示。
  • 打赏
  • 举报
回复
举个例子可以demo这个机制:
public class MyViewModel
{
    private string _A;

    public string A
    {
        set
        {
            _A = value;
            if (!Dirty)
                Dirty = true;
        }
        get
        {
            return _A;
        }
    }

    public bool Dirty { get; set; }

    public void Save()
    {
        ........保存状态
        Dirty = true;
    }
}
这样,界面对应的 ViewModel 本身有一个 Dirty 属性来说明是否脏。 当然,作为 VM 设计肯定还有 INotifyPropertyChanged 等等接口。这里只是来说明 Dirty 属性的操作机制。
  • 打赏
  • 举报
回复
上面有个逻辑 bug,改一下
    public void Save()
    {
        ........保存状态
        Dirty = false;
    }
当用户在界面操作时,改变数据,则设置了 Dirty 状态。那么你在窗体关闭、或者任何其它时刻,可以根据 Dirty 来进行提示,需要的时候则调用 Save 方法。
大然然 2018-12-26
  • 打赏
  • 举报
回复
百度INotifyPropertyChanged
平底锅锅锅 2018-12-26
  • 打赏
  • 举报
回复
foucus或者mouse move之类的事件,配合ValueChanged或者SelectedIndexChanged事件。

17,748

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧