zoukankan      html  css  js  c++  java
  • WPF MVVM手敲简单框架

    好处是,XAML界面Binding到数据后,只需要更新数据,无需再次手动绑定即可完成界面更新。

    1.创捷数据类,Model。
    例如我创建的CarInfo.cs

    namespace MVVMDemo1
    {
        public class CarInfo
        {
            string CarName_;
            string CarID_;
    
            public string CarName
            {
                get { return CarName_; }
                set { CarName_ = value; }
            }
    
            public string CarID
            {
                get { return CarID_; }
                set { CarID_ = value; }
            }
        }
    }
    

    2.创建视图数据类,ViewModel。
    例如我创建的CarInfoViewModel.cs

    using System.ComponentModel;
    
    namespace MVVMDemo1
    {
        public class CarInfoViewModel : INotifyPropertyChanged
        {
            CarInfo CarInfo_;
            public CarInfoViewModel()
            {
                CarInfo_ = new CarInfo() {CarName="河南1",CarID="HMB001" };
            }
    
            public string CarName
            {
                get { return CarInfo_.CarName; }
                set { CarInfo_.CarName = value; RaisePropertyChanged("CarName"); }
            }
            public string CarID
            {
                get { return CarInfo_.CarID; }
                set { CarInfo_.CarID = value; RaisePropertyChanged("CarID"); }
            }
    
            /// <summary>
            /// 实现接口
            /// </summary>
            public event PropertyChangedEventHandler PropertyChanged;
    
            private void RaisePropertyChanged(string propertyInfo)
            {
                PropertyChangedEventHandler handler = PropertyChanged;
                if(handler != null)
                {
                    handler(this,new PropertyChangedEventArgs(propertyInfo));
                }
            }
        }
    }
    

    3.视图界面声明视图模型
    Xaml文件中声明视图模型

    <Window x:Class="MVVMDemo1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:MVVMDemo1"
            mc:Ignorable="d"
            Title="MainWindow" Height="450" Width="800">
        <Window.DataContext>
            <!--声明创建一个CarViewModel的实例-->
            <local:CarInfoViewModel/>
        </Window.DataContext>
        <Grid>
            <TextBox HorizontalAlignment="Left" Height="23" Margin="10,10,0,0" TextWrapping="Wrap" Text="{Binding CarName}" VerticalAlignment="Top" Width="120"/>
            <TextBox HorizontalAlignment="Left" Height="23" Margin="10,38,0,0" TextWrapping="Wrap" Text="{Binding CarID}" VerticalAlignment="Top" Width="120"/>
            <Button Content="Button" HorizontalAlignment="Left" Margin="195,145,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
        </Grid>
    </Window>
    

    4.关联数据上下文
    主界面后台关联上下文,实现自动刷新数据

    using System.Windows;
    
    namespace MVVMDemo1
    {
        /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window
        {
    
            CarInfoViewModel carInfoViewModel;
            /// <summary>
            /// 视图模型
            /// </summary>
            public MainWindow()
            {
                InitializeComponent();
                //已经在xaml代码中声明了视图模型实例,获取到引用因此我们可以在按钮click事件里使用它
                carInfoViewModel = base.DataContext as CarInfoViewModel;
            }
            /// <summary>
            /// 更改数据
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                //更改数据,界面实时更新
                carInfoViewModel.CarID = "";
            }
        }
    }
    

    End

  • 相关阅读:
    sendmessage参数
    combobox添加选项
    sql数据库时间转换convert
    Javascript知识四(DOM)
    Javascript知识三
    JavaScript知识(二)
    JavaScript知识(一)
    三层架构
    ADO知识的运用二(Day 28)
    SQL知识三(Day 27)
  • 原文地址:https://www.cnblogs.com/cnwy/p/13772895.html
Copyright © 2011-2022 走看看