C# 利用IEditableObject接口实现可撤销编辑的对象

/*
 * 由SharpDevelop创建。
 * 用户: Changweihua
 * 日期: 2014/3/2
 * 时间: 20:49
 *
 */
using System;
using System.ComponentModel;
namespace IEditableObjectSapmle
{
    class Program
    {
        public static void Main(string[] args)
        {
            Person person = new Person()
            {
                FirstName = "Weihua",
                LastName = "Chang"
            };
            Console.WriteLine(person.FullName);
                        
            person.BeginEdit();
            person.FirstName = "Meizhi";
            person.LastName = "Tan";
                        
            person.EndEdit();
            Console.WriteLine(person.FullName);
                        
            person.CancelEdit();
            Console.WriteLine(person.FullName);
                        
            Console.ReadKey(true);
        }
    }
                
    public class Person : INotifyPropertyChanged, IEditableObject
    {
        private string _firstName;
        public string FirstName
        {
            get { return _firstName; }
            set
            {
                if (_firstName != value)
                {
                    _firstName = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("FirstName"));
                        PropertyChanged(this, new PropertyChangedEventArgs("FullName"));
                    }
                }
            }
        }
        private string _lastName;
        public string LastName
        {
            get { return _lastName; }
            set
            {
                if (_lastName != value)
                {
                    _lastName = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("LastName"));
                        PropertyChanged(this, new PropertyChangedEventArgs("FullName"));
                    }
                }
            }
        }
        public string FullName
        {
            get
            {
                return FirstName + "," + LastName;
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
        private Person backup;//用这个字段来保存一个备份数据
        public void BeginEdit()
        {
            //开始编辑,此时将当前的状态保存起来,以便后续可以根据情况提交或者撤销更改
            backup = this.MemberwiseClone() as Person;//通过克隆的方式直接地复制一份数据
        }
        public void CancelEdit()
        {
            //撤销编辑,此时将对象状态恢复到备份的状态
            this.FirstName = backup.FirstName;
            this.LastName = backup.LastName;
        }
        public void EndEdit()
        {
            //结束编辑,这里可以不做任何事情,也可以添加一些额外的逻辑
        }
    }
}

点击查看原图

知识共享许可协议
《C# 利用IEditableObject接口实现可撤销编辑的对象》常伟华 创作。
采用 知识共享 署名-相同方式共享 3.0 中国大陆 许可协议进行许可。
  • 多说评论
  • 签名
  • 新浪微博
  • 默认评论
  • Tab Header 5

0 条评论 / 点击此处发表评论

Tab Content 5

开发技术


开发平台和工具

sitemap     171.86ms