简单的MVVM的实例

Posted hushzhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单的MVVM的实例相关的知识,希望对你有一定的参考价值。

在Model层中建一个Person类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestPractice.Model
{
    public class Person
    {
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        private string age;
        public string Age
        {
            get { return age; }
            set { age = value; }
        }
        public Person(string name, string age)
        {
            this.Name = name;
            this.Age = age;
        }
    }
}

在Service层中建一个IPersonInformation,IQueryService接口和PersonInformation,QueryService类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TestPractice.Model;

namespace TestPractice.Service
{
    interface IPersonInformation
    {
        List<Person> GetPersonInformation();   
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TestPractice.Model;

namespace TestPractice.Service
{
    public class PersonInformation:IPersonInformation
    {
        public List<Person> GetPersonInformation()
        {
            List<Person> personList = new List<Person>();
            personList.Add(new Person("张学健", "19"));
            personList.Add(new Person("李四", "20"));
            personList.Add(new Person("王五", "21"));
            personList.Add(new Person("孙红雷", "22"));
            return personList;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TestPractice.Model;

namespace TestPractice.Service
{
    interface IQueryService
    {
        Person Searching(string up);
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TestPractice.Model;

namespace TestPractice.Service
{
    class QueryService : IQueryService
    {
        public Person Searching(string SearchText)
        {
            PersonInformation per = new PersonInformation();
            List<Person> Members = per.GetPersonInformation();

            Person p= new Person("","");

            if (!string.IsNullOrEmpty(SearchText))
            {
                foreach (var i in Members)
                {
                    if (i.Name.Contains(SearchText))
                    {
                        return i;
                    }
                }
                
            }
            return p;
        }
    }
}

在ViewModel中创建一个MainWindowViewModel类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TestPractice.Model;

namespace TestPractice.Service
{
    class QueryService : IQueryService
    {
        public Person Searching(string SearchText)
        {
            PersonInformation per = new PersonInformation();
            List<Person> Members = per.GetPersonInformation();

            Person p= new Person("","");

            if (!string.IsNullOrEmpty(SearchText))
            {
                foreach (var i in Members)
                {
                    if (i.Name.Contains(SearchText))
                    {
                        return i;
                    }
                }
                
            }
            return p;
        }
    }
}

在MainWindow中:

<Window x:Class="TestPractice.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="公司人员查询系统" Height="350" Width="525"
        WindowStartupLocation="CenterScreen">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Border BorderBrush="Black" BorderThickness="1" CornerRadius="6" Padding="2" Grid.Row="0">
        <StackPanel>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="公司人员查询系统" FontSize="20"  FontFamily="LiShu"  TextAlignment="Center" Width="517"/>
            </StackPanel>
        </StackPanel>
        </Border>
        <Border BorderBrush="Black" BorderThickness="1" CornerRadius="6" Padding="6" Grid.Row="1">
            <StackPanel>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="姓名:" FontSize="15"  FontFamily="LiShu" Height="20" />
                    <TextBox FontSize="15"  FontFamily="LiShu" Width="155" Text="{Binding SearchText,Mode=TwoWay}"/>
                </StackPanel>
            </StackPanel>
        </Border>
        <Border BorderBrush="Black" BorderThickness="1" CornerRadius="6" Padding="6" Grid.Row="2">
            <Button Content="查询" FontSize="15" Margin="255,0,167,242" Command="{Binding SeacheringCommand}"/>
        </Border>
        <Border BorderBrush="Black" BorderThickness="1" CornerRadius="6" Padding="6" Grid.Row="3">
            <StackPanel>
                <StackPanel Orientation="Horizontal" Height="270">
                    <TextBlock Text="姓名:" FontSize="15"  FontFamily="LiShu" Margin="10,89,0,0" Width="56" Height="31" VerticalAlignment="Top" />
                    <Label Content="{Binding P.Name,Mode=TwoWay}" FontSize="15" Width="150" Margin="0,77,0,161" RenderTransformOrigin="0.577,0.743"></Label>
                </StackPanel>
            </StackPanel>
        </Border>
        <Border BorderBrush="Black" BorderThickness="1" CornerRadius="6" Padding="6" Grid.Row="4">
            <StackPanel>
                <StackPanel Orientation="Horizontal" Height="270">
                    <TextBlock Text="年龄:" FontSize="15"  FontFamily="LiShu" Margin="10,164,0,75" Width="56" Height="31" RenderTransformOrigin="2.091,0.55" />
                    <Label Content="{Binding P.Age,Mode=TwoWay}" FontSize="15" Width="150" Margin="0,153,0,75" RenderTransformOrigin="0.577,0.743"></Label>
                </StackPanel>
            </StackPanel>
        </Border>
    </Grid>
</Window>

 

以上是关于简单的MVVM的实例的主要内容,如果未能解决你的问题,请参考以下文章

简单的MVVM的实例

使用 NavController 从片段导航到另一个片段

使用 MVVM 和数据绑定更改每个片段中的工具栏标题

Android MVVM:具有多个片段的活动 - 将共享 LiveData 放在哪里?

Node.js实例说明MVC,MVP,MVVM架构

WPF MVVM实例三