zoukankan      html  css  js  c++  java
  • MVVM 学习之 生肖查询器

    以前winform 入门的时候 做了个非常简单的 生肖查询器。效果如下:

    看了些不少资料,发现MVVM模式挺好用的。 

    M----model   V-----view    VM-----viewmodel 

     

    具体的不说了,博客园,银光中国,很多地方都有介绍。 我个人觉得最主要用到的就是 silverlight 的绑定机制。

    于是乎就想自己做个简单的MVVM例子,想了想就把生肖查询器给转换过来了

     

    整个解决方案 的树形结构如下:

    具体代码示例如下: 

    AnimalModel 

    using System; 

    using System.Net; 

    using System.Windows; 

    using System.Windows.Controls; 

    using System.Windows.Documents; 

    using System.Windows.Ink; 

    using System.Windows.Input; 

    using System.Windows.Media; 

    using System.Windows.Media.Animation; 

    using System.Windows.Shapes; 

    using System.ComponentModel;

    namespace SearchAnimals.Model 

    { 

        public class AnimalModel : INotifyPropertyChanged 

        { 

                public event PropertyChangedEventHandler PropertyChanged;       

            #region Animal 私?有瓺 属?性? 

            private String _Year; 

            private String _Name; 

            private String _Image; 

            #endregion 

     

            #region Animal 共2有瓺 属?性? 

            public String Year { 

                get {

                    return _Year;

                }

                set {

                    _Year = value;

                    updata("Year");

                }

            }

     

            public String Name {

                get {

                    return _Name;

                }

                set {

                    _Name = value;

                    updata("Name");

                }

            }

     

            public String Image {

                get {

                    return _Image;

                }

                set {

                    _Image = value;

                    updata("Image");

                }

            }

            #endregion

     

            private void updata(String name)  {

                if (PropertyChanged != null) {

                    PropertyChanged(thisnew PropertyChangedEventArgs(name));

                }

            }

     

                 

     

     

        }

    }

     

    AnimalView.xaml

    <UserControl

        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:SearchAnimals_ViewModel="clr-namespace:SearchAnimals.ViewModel" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" x:Class="SearchAnimals.View.AnimalView"

        mc:Ignorable="d"

        d:DesignHeight="300" d:DesignWidth="400">

        

    <UserControl.Resources>

    <SearchAnimals_ViewModel:AnimalViewModel x:Key="AnimalViewModelDataSource" d:IsDataSource="True"/>

    </UserControl.Resources>

        

    <Grid x:Name="LayoutRoot" Background="White" DataContext="{Binding Source={StaticResource AnimalViewModelDataSource}}">

    <Grid.RowDefinitions>

    <RowDefinition Height="1*"/>

    <RowDefinition Height="2*"/>

    </Grid.RowDefinitions>

    <Grid Grid.Row="0">

    <Grid.RowDefinitions>

    <RowDefinition Height="1*"/>

    <RowDefinition Height="1*"/>

    </Grid.RowDefinitions>

    <Grid.ColumnDefinitions>

    <ColumnDefinition Width="1*"/>

    <ColumnDefinition Width="1*"/>

    </Grid.ColumnDefinitions>

    <ComboBox x:Name="comboBox" Grid.Row="0" Grid.Column="0" ItemsSource="{Binding ListYear}" FontFamily="SketchFlow Print" FontSize="24"  HorizontalAlignment="Center" VerticalAlignment="Center"/>

    <Button Content="LookUp" Grid.Row="0" Grid.Column="1" FontSize="32" FontFamily="SketchFlow Print" CommandParameter="{Binding SelectedItem, ElementName=comboBox}" Command="{Binding SearchCommand, Mode=OneWay}" HorizontalAlignment="Center" VerticalAlignment="Center" />

    <Button Content="CopyResult" Grid.Row="1" Grid.Column="1" FontSize="32" FontFamily="Comic Sans MS" HorizontalAlignment="Center" VerticalAlignment="Center" Command="{Binding CopyCommand, Mode=OneWay}" />

    <sdk:Label  Grid.Row="1" Grid.Column="0" FontSize="20" Content="{Binding Animal.Name}" HorizontalAlignment="Center" VerticalAlignment="Center"/>

    </Grid>

    <Grid Grid.Row="1">

    <Grid.Background>

    <ImageBrush Stretch="Fill" ImageSource="{Binding Animal.Image}"/>

    </Grid.Background>

    <Border BorderBrush="LightBlue" BorderThickness="3"/>

    </Grid>

    </Grid>

    </UserControl>

    AnimalView.xaml.Cs  无特别内容 

     

    AnimalViewModel.cs 

    using System;

    using System.Net;

    using System.Windows;

    using System.Windows.Controls;

    using System.Windows.Documents;

    using System.Windows.Ink;

    using System.Windows.Input;

    using System.Windows.Media;

    using System.Windows.Media.Animation;

    using System.Windows.Shapes;

    using System.ComponentModel;

    using SearchAnimals.Model;

    using Microsoft.Expression.Interactivity.Core;

    using System.Collections.Generic;

     

    namespace SearchAnimals.ViewModel

    {

        public class AnimalViewModel:INotifyPropertyChanged

        {

            #region INotifyPropertyChanged Members

     

            public event PropertyChangedEventHandler PropertyChanged;

     

            #endregion

     

            #region AnimalViewModel 私有属性

            

            /// <summary>

            /// 定义一个AnimalModel对象

            /// </summary>

            private AnimalModel _Animal;

            private ICommand _SearchCommand;

            private ICommand _CopyCommand;

            private List<String> _ListYear;

            private String _SelectYear;

            #endregion

     

            #region AnimalViewModel 共有属性

     

            public AnimalModel Animal {

                get {

                    return _Animal;

                }

                set {

                    _Animal = value;

                    updata("Animal");

                }            

            }

     

            public String SelectYear {

                get {

                    return _SelectYear;

                }

                set {

                    _SelectYear = value;

                    updata("SelectYear");

                }

            }

     

            public ICommand SearchCommand {

                get {

                    if (_SearchCommand == null) _SearchCommand = new ActionCommand(search);

                    return _SearchCommand;

                }

            }

     

            public ICommand CopyCommand {

                get {

                    if (_CopyCommand == null) _CopyCommand = new ActionCommand(copy);

                    return _CopyCommand;

                }

            }

     

            public List<String> ListYear {

                get {

                    return _ListYear;

                }

                set {

                    _ListYear = value;

                }

            }

            

            #endregion

     

            #region 私有方法

            private void updata(String name) {

                if (PropertyChanged != null) {

                    PropertyChanged(this, new PropertyChangedEventArgs(name));

                }

            }

            

            /// <summary>

            /// 更新 选择生肖

            /// </summary>

            /// <param name="obj"></param>

            private void search(Object obj) {

     

                String year = obj.ToString();

     

                String strName = getAnimalNameByYear(int.Parse(year));

                String strImage = "";

                

                switch (strName) {

                    case "":

                        strImage = "/SearchAnimals;component/Images/animal_shu.jpg";

                        break;

                    case "":

                        strImage = "/SearchAnimals;component/Images/animal_niu.jpg";

                        break;

                    case "":

                        strImage = "/SearchAnimals;component/Images/animal_hu.jpg";

                        break;

                    case "":

                        strImage = "/SearchAnimals;component/Images/animal_tu.jpg";

                        break;

                    case "":

                        strImage = "/SearchAnimals;component/Images/animal_long.jpg";

                        break;

                    case "":

                        strImage = "/SearchAnimals;component/Images/animal_shejpg";

                        break;

                    case "":

                        strImage = "/SearchAnimals;component/Images/animal_ma.jpg";

                        break;

                    case "":

                       strImage = "/SearchAnimals;component/Images/animal_yang.jpg";

                        break;

                    case "":

                        strImage = "/SearchAnimals;component/Images/animal_hou.jpg";

                        break;

                    case "":

                        strImage = "/SearchAnimals;component/Images/animal_ji.jpg";

                        break;

                    case "":

                       strImage = "/SearchAnimals;component/Images/animal_gou.jpg";

                        break;

                    case "":

                       strImage = "/SearchAnimals;component/Images/animal_zhu.jpg";

                        break;

                }

     

                _Animal.Year = year;

                _Animal.Name = strName;

                _Animal.Image = strImage;

            }

     

            private void copy() {

                Clipboard.SetText(_Animal.Name);

                MessageBox.Show("GongXi , Copy of it Ok!");

            }

     

            /// <summary>

            /// 通过年份 获取 生效

            /// </summary>

            /// <param name="year"></param>

            /// <returns></returns>

            private String getAnimalNameByYear(int year) {

                String name = "";

                int initialYear = 1900;

                int judgeYear = (year - initialYear) % 12;

                switch (judgeYear)

                {

                    case 0:

                        name = "";                               

                        break;

                    case 1:

                        name = "";  

                        break;

                    case 2:

                        name = "";  

                        break;

                    case 3:

                        name = "";  

                        break;

                    case 4:

                        name = "";  

                        break;

                    case 5:

                        name = "";  

                        break;

                    case 6:

                        name = "";  

                        break;

                    case 7:

                        name = "";  

                        break;

                    case 8:

                        name = "";  

                        break;

                    case 9:

                        name = "";  

                        break;

                    case 10:

                        name = "";  

                        break;

                    case 11:

                        name = "";  

                        break;

                    default:

                        MessageBox.Show("请重新选择!");

                        break;

                }

                return name;

            }

     

            /// <summary>

            /// 初始化 选择的年份

            /// </summary>

            /// <returns></returns>

            private List<String> initListYear() {

                List<String> listyear = new List<string>();

                for (int numbers = 2140; numbers >= 1980; numbers--) {

                    listyear.Add(numbers.ToString());

                }

                return listyear;

            }

     

            /// <summary>

            /// 初始化 Animal

            /// </summary>

            /// <returns></returns>

            private AnimalModel initAnimal() {

                AnimalModel am = new AnimalModel();

                am.Year = "2010";

                am.Name = "";

                am.Image = "Images/animal_hu.jpg";

                return am;

            }       

            #endregion

            /// <summary>

            /// AnimalViewModel 构造方法

            /// </summary>

            public AnimalViewModel() {

                _Animal = initAnimal();           

                _ListYear = initListYear();

            }

        }

    }

     


  • 相关阅读:
    python Json报错json.decoder.JSONDecodeError
    jupyter notebook改变行间图片大小
    SVM算法核函数的选择
    Linux中长时间运行程序的方法
    python通过多线程并获取返回值
    python多进程multiprocessing Pool相关问题
    pandas.read_sql_query()读取数据库数据用chunksize的坑
    Docker学习——Dockerfile
    Android之自定义ListView(一)
    Java编程思想——初始化与清理
  • 原文地址:https://www.cnblogs.com/luxiaofeng54/p/1888735.html
Copyright © 2011-2022 走看看