WPF 高级篇 MVVMlight

准备工作 新建一个WPF应用成 下载MVVMlight框架 

安装好后 看一下引用层面 多了几个GalaSoft.MvvMLight.DLL

  框架安装好了   准备一个基础类 因为Model 和数据层 不是重点  这里就直接贴码

Book&BookData

namespace WPF.Models
{
   public class Book
    {
        private Guid id;

        public Guid Id
        {
            get { return id; }
            set { id = value; }
        }
        private string title;

        public string Title
        {
            get { return title; }
            set { title = value; }
        }

        private string description;

        public string Description
        {
            get { return description; }
            set { description = value; }
        }

        private int pages;

        public int Pages
        {
            get { return pages; }
            set { pages = value; }
        }
        private string author;

        public string Author
        {
            get { return author; }
            set { author = value; }
        }
    }
}
namespace WPF.Models
{
   public  class BookData
    {
       private static List<Book> _allBooks = new List<Book>();
        static BookData()
       {
           _allBooks.Add(new Book
           {
               Id = Guid.NewGuid(),
               Title = "平凡的世界",
               Author = "路遥",
               Description = "《平凡的世界(套装共3册)》是一部现实主义小说,也是小说化的家族史。作家高度浓缩了中国西北农村的历史变迁过程,作品达到了思想性与艺术性的高度统一,特别是主人公面对困境艰苦奋斗的精神,对今天的大学生朋友仍有启迪。",
               Pages = 371
           });
           _allBooks.Add(new Book
           {
               Id = Guid.NewGuid(),
               Title = "白鹿原",
               Author = "陈忠实",
               Description = "《白鹿原》是一部渭河平原五十年变迁的雄奇史诗,一轴中国农村班斓多彩、触目惊心的长幅画卷。……厚重深邃的思想内容,复杂多变的人物性格,跌宕曲折的故事情节,绚丽多彩的风土人情,形成作品鲜明的艺术特色和令人震撼的真实感。",
               Pages = 371
           });

           _allBooks.Add(new Book
           {
               Id = Guid.NewGuid(),
               Title = "瓦尔登湖",
               Author = "梭罗",
               Description = "《瓦尔登湖》是一本超凡入圣的好书,严重的污染使人们丧失了田园的宁静,所以梭罗的著作便被整个世界阅读和怀念了。",
               Pages = 371
           });

           _allBooks.Add(new Book
           {
               Id = Guid.NewGuid(),
               Title = "老人与海",
               Author = "海明威",
               Description = "《老人与海》所塑造的“硬汉”形象圣地亚哥是海明威所崇尚的完美的人的象征,他坚强、宽厚、乐观、充满自信、热爱生活,即使在人生的角斗场上失败了,面对不可逆转的命运,他仍然是精神上的强者。这一形象激励了一代又一代人,也是本书经久不衰的一个重要原因。",
               Pages = 371
           });

           _allBooks.Add(new Book
           {
               Id = Guid.NewGuid(),
               Title = "世界上的另一个你",
               Author = "朗·霍尔(Ron Hall),丹佛·摩尔(Denver Moore)",
               Description = "这是个真实的故事,故事里闪过真实的人生片段──贪婪、恐惧、苦多于乐、希望、惊喜。《世界上的另一个你》蝉联纽约时报非小说类畅销书排行榜长达3年,至今屹立不摇。一个比小说更像小说的真实故事!",
               Pages = 371
           });
       }

       public static bool AddBook( Book book) 
       {
           _allBooks.Add(book);
           return true;
       }
       public static IEnumerable<Book> GetBook() 
       {
           return _allBooks;
       }

       public static Book GetBookById(Guid id)
       {
           return _allBooks.FirstOrDefault(b => b.Id == id);
       }

       public static bool DeleteBook(Book book) 
       {
           _allBooks.Remove(book);
           return true;
       }
       public static bool UpdateBook(Book book) 
       {    
           var trbook = _allBooks.FirstOrDefault(b => b.Id == book.Id);
           var index = _allBooks.IndexOf(trbook);
           _allBooks.Remove(trbook);
           _allBooks.Insert(index, book);
           return true;
       }
    }
}

View层搭建

我们现在搭建View层和ViewModel层

原理上 一个View(界面窗体 )对应一个ViewModel 所以我们现在俩个窗体对应俩个ViewModel 方便管理ViewModel 会给ViewModel集体作一个ViewModelLocator 

在APP中 修改主窗体地址 和对ViewModelLocator引用

<Application x:Class="WPF.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:viewModel="clr-namespace:WPF.ViewModels"
             StartupUri="Views/MainWindow.xaml">
    <Application.Resources>
        <viewModel:ViewModelLocator x:Key="ViewModelLocator" ></viewModel:ViewModelLocator>
    </Application.Resources>
</Application>

讲解一下一个 为什么要在App中增加对应Locator引用后 通过Key可以全局进行访问 方便的不要不要的

    <viewModel:ViewModelLocator x:Key="ViewModelLocator" ></viewModel:ViewModelLocator>

下一篇 会讲

发布了279 篇原创文章 · 获赞 43 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/q465162770/article/details/103593976