zoukankan      html  css  js  c++  java
  • ViewModelBase && ObservableObject

    ViewModelBase && ObservableObject

    在Mvvm中,ViewModel和Model都需要具有通知界面更新数据的能力,这都要借助于WPF中的
    INotifyPropertyChanged 接口,每一个ViewModel和Model都要去实现接口就太麻烦,于是作为
    Mvvm框架的MvvmLight直接为我们提供了基类,并已经实现了这个接口。ViewModel继承自ViewModelBase
    ,Model继承自ObservableObject。在更新属性时,调用RaisePropertyChanged()来通知界面更新。

      public class Student : ObservableObject
      {
        private string name;
    
        public string Name
        {
          get
          {
            return name;
          }
          set
          {
            name = value;
            RaisePropertyChanged(() => Name);
          }
        }
      }
    

    另外ViewModelBase还提供了一个判断当前是否设计时的属性IsInDesignMode,这个属性用于在ViewModel
    中区分当前是运行时还是设计时,设计时可以显示一些模拟数据,运行时就显示真实数据,对UI开发人员是一个
    比较友好的东西。

    class AppViewModel : ViewModelBase
    {
        private ObservableCollection<Student> _students;
    
        public ObservableCollection<Student> Students
        {
            get
            {
                return _students;
            }
            set
            {
                _students = value;
                RaisePropertyChanged(() => Students);
            }
        }
    
        public AppViewModel()
        {
            if (IsInDesignMode)
            {
                //模拟数据
                Students = new ObservableCollection<Student>()
                {
                    new Student(){Name = "MaYun"}
                };
            }
            else
            {
                //运行时
                Students = ISchool.GetAllStudents();
            }
        }
    }
    

    有了这2个基类的帮助,我们还需要在界面上进行正确的绑定

    <Window x:Class="MvvmDemo.Views.AppView"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="AppView" Height="300" Width="300">
        <Grid>
            <ListView ItemsSource="{Binding Students}">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="姓名" DisplayMemberBinding="{Binding Name}"></GridViewColumn>
                    </GridView>
                </ListView.View>
            </ListView>
        </Grid>
    </Window>
    

    ListView的ItemSource绑定到了ViewModel上的Students集合,此时Vs中还不能显示数据,那是因为,
    我们并没有将View和ViewModel联系起来,View的DataContext就是ViewModel,下面我们将提到一个重要
    的类ViewModelLocator(视图模型定位器)

  • 相关阅读:
    【转载】分布式之redis复习精讲
    Oracle学习笔记——常用函数总结
    数据库 字段动态添加
    c# form的设定
    C# 单元测试,测试资源管理器里面没有需要的单元测试
    Nvidia--cuda--document
    C# 文件的读取与另存为(WPF)
    java反射概述
    java设计模式:工厂模式
    oracle表被锁定的解决办法
  • 原文地址:https://www.cnblogs.com/HelloMyWorld/p/4750068.html
Copyright © 2011-2022 走看看