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

38656888 2018-12-26 11:26:28
WPF,一个窗体(window usercontrol等)内,有几个Textbox或者CheckBox,当在界面改变了值时如何知道,当焦点离开了这个窗体之后,要有提示,像文本文档打开后,更改了,想要关闭时的那样有提示保存
...全文
571 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
exception92 2018-12-27
  • 打赏
  • 举报
回复
在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事件。
具体要求:***********尽量做的简单化 别用CSS技术以及自定义控件 别用脚本语言 我们看不懂 达到我们学生初级初级水平****** 在线售票系统(毕业设计) 系统设置:密码修改 增加用户(权限) [打印机设置 票样打印设置 这2块用不着实现系统界面上 放着就好了] 基础设置:基础参数设置(买票设置/订票设置/退票设置)(比如多少时间之前不能买票订票) 车票设置(标准票/儿童票/。。。增删改) 车辆设置(增删该) 车次设置(增删该) 运营计划设置(调度设置) 前台营业:销售车票 预定车票 退回车票 信息查询:售票信息查询 订票信息查询 运营计划查询 当班信息查询(类似当班收入什么的) 营业统计:日售票报表统计 月售票报表统计 季度售票报表统计 常用工具:记事本、计算器 备注信息:只要程序 不要论文 5/1号要 你看能不 能按照这个界面这样做 这样应该做界面的人有个参照就简单点吧 最好按照这个系统的流程做 有些具体的我订单上没有写说明的就省了吧 但是你要把刚刚我们2个的都做简单再简单。。。。行不 别用java脚本 或者CSS 不然我们不懂的 界面漂亮点 代码菜鸟点 使用帮助: 1. 把DB文件夹的主数据库webSealTicket_Data.MDF 还原到你的sql 2000数据库系统中 名称不要变为webSealTicket。 2. App_Code文件夹下是sql静态链接类System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection("server=(local);database=webSealTicket;uid=sa;pwd=;"); 如直接还原这里不用变化"server=(local)是你的本机的ip地址,database=webSealTicket 是你的数据库名称不要变化,uid=sa 是sql2000的用户名,pwd位密码。 3. login.aspx文件设置成主页,为登录界面。登录成共进入Index.aspx页面。 4. image 文件夹为系统中用到的图片。 5. 如出现连接数据库问题请查看Web.Config文件用记事本打开配置节 为程序中用到的数据库链接。name="webSealTicketConnectionString"为连接字符串。connectionString="Data Source=.;Initial Catalog=webSealTicket; 为数据源。 Security=True"启用安全。 @更多@ http://cleopard.download.csdn.net/ 福利 http://xuemeilaile.com @更多@ http://download.csdn.net/user/cleopard/album 17份软件测试文档 http://download.csdn.net/album/detail/1425 13份WPF经典开发教程 http://download.csdn.net/album/detail/1115 C#资料合辑二[C#桌面编程入门篇] http://download.csdn.net/album/detail/957 C#资料合辑一[C#入门篇] http://download.csdn.net/album/detail/669 [Csharp高级编程(第6版)](共8压缩卷) http://download.csdn.net/album/detail/667 10个[精品资源]Java学习资料合辑[一] http://download.csdn.net/album/detail/663 10个C#Socket编程代码示例 http://download.csdn.net/album/detail/631 6份GDI+程序设计资源整

17,740

社区成员

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

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