• 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

  • 相关阅读:
    sqlserver日期推算
    bcp sqlserver 导入 导出 数据
    sqlserver 2008 序列号
    mysql 学习总结
    使用Eclipse对JUnit测试函数进行Debug时断点无效问题
    ORACLE死锁故障排查的一般性手法的备忘录
    BigDecimal进行Format时产生的[java.lang.IllegalArgumentException: Digits < 0]异常
    Java中keySet()返回值的排序问题
    严蔚敏数据结构视频教程下载
    C、C++经典书籍
  • 原文地址:https://www.cnblogs.com/cnwy/p/13772895.html
Copyright © 2020-2023  润新知