WPF比较两个随机数大小写,利用MVVM思想实现

MVVM模式是把表现层和业务层完全分离,所以这里就使用MVVM制作一个极其简单的WPF的例子:

先看看最终图:

上图,需要实现的是,界面两个按钮,一个是生成随机两个数,一个是对两个数比较,把大的数显示出来。所以需要三个属性,两个事件。

由于逻辑比较简单,不用写model等类,实现如下:

1、创建基类NotifictionObject.cs,实现接口INotifyPropertyChanged

 class NotifictionObject : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public void RaisePropertyChanged(string str)
        {
            if (this.PropertyChanged != null)
                this.PropertyChanged(this, new PropertyChangedEventArgs(str));
        }

    }

2、创建DelegateCommand.cs,继承ICommand

  class DelegateCommand : ICommand
    {
        public Func<object,bool> CanExecuteFunc { get; set; }

        public Action<object> ExecuteAction { get; set; }

        public event EventHandler CanExecuteChanged;

        public bool CanExecute(object parameter)
        {
            if (CanExecuteFunc == null)
                return true;
            return CanExecuteFunc(parameter);
        }

        public void Execute(object parameter)
        {
            if (ExecuteAction == null)
                return;
            ExecuteAction(parameter);
        }
    }

3、再创建类MainWindowViewModel.cs,继承NotifictionObject基类

class MainWindowViewModel : NotifictionObject
    {
        private int a;

        public int RndA
        {
            get { return a; }
            set
            {
                a = value;
                RaisePropertyChanged("RndA");
            }
        }
        private int b;

        public int RndB
        {
            get { return b; }
            set
            {
                b = value;
                RaisePropertyChanged("RndB");
            }
        }
        private int result;

        public int Result
        {
            get { return result; }
            set
            {
                result = value;
                RaisePropertyChanged("Result");
            }
        }

        public DelegateCommand CompareCommand { get; set; }
        public DelegateCommand ReNewRndNumCommand { get; set; }

        Random rnd = new Random();
        public MainWindowViewModel()
        {
            LoadData();

            CompareCommand = new DelegateCommand();
            CompareCommand.ExecuteAction = (para) =>
            {
                Result = RndA >= RndB ? RndA : RndB;
            };

            ReNewRndNumCommand = new DelegateCommand();
            ReNewRndNumCommand.ExecuteAction = (para) =>
            {
                LoadData();
            };
        }

        public void LoadData()
        {
            RndA = rnd.Next(0, 100);
            RndB = rnd.Next(0, 100);
        }
    }

4、类都实现了,现在实现界面部分

<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <TextBlock Margin="10"  x:Name="textBlock" TextWrapping="Wrap" Text="数字1:"/>
        <TextBlock Margin="10" x:Name="textBlock1" Grid.Column="1" TextWrapping="Wrap" Text="{Binding RndA}"/>
        <TextBlock Margin="10" x:Name="textBlock2" Grid.Column="2" TextWrapping="Wrap" Text="数字2:"/>
        <TextBlock Margin="10"  x:Name="textBlock3" Grid.Column="3" TextWrapping="Wrap" Text="{Binding RndB}"/>

        <Button Grid.Row="1" Command="{Binding ReNewRndNumCommand}" Grid.ColumnSpan="2" Width="75" Margin="10">重新生成数</Button>
        <Button x:Name="button" Command="{Binding CompareCommand}" Margin="10" Content="比较大小" Grid.ColumnSpan="2" Grid.Row="1" Grid.Column="2" Width="75"/>

        <TextBlock x:Name="textBlock4" Margin="10" HorizontalAlignment="Center" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="4" TextWrapping="Wrap" Text="{Binding Result}"/>

    </Grid>

5.在主界面的C#初始化时添加上下文:

public MainWindow()
{
   InitializeComponent();

   this.DataContext = new MainWindowViewModel();
}

代码就不详细介绍了,自己慢慢看,不是太难,多多练习。

时间: 2025-01-13 19:29:28

WPF比较两个随机数大小写,利用MVVM思想实现的相关文章

利用MVVM设计快速开发个人中心、设置等模块

我们在做iOS开发过程中,静态页面的开发比开发动态页面更让我们开发者抓狂.因为动态页面通常是一个页面一种cell样式,作为开发者只需要专注于定制好一种样式之后,就可以使用数据填充出较好的界面.而静态cell,则可能因为一个页面有多种cell样式,而且很有可能不是标准的cell样式,需要我们自定义,因此容易写出来的代码容易臃肿和重复.可读性差.这不符合开发者的代码优化原则(不主动重复).我时常会因为开发这种页面抓狂,因为会纠结到底怎么写会让代码可读性好点,写重复代码的机会少点.本文就是我做过的几个

WPF中实现拍照功能(利用“WPFMediaKit.dll”)

开始先展示下效果图: -------------------------------下面记录步骤:------------------------------------------------------ 下载“WPFMediaKit.dll”程序开发包,用在项目中添加引用: 在WPF窗口引入并命名: xmlns:wpfMedia="clr-namespace:WPFMediaKit.DirectShow.Controls;assembly=WPFMediaKit" 在界面用到一个V

生成两位随机数

编写脚本生成2位的随机数,要求个位和十位数不能相同,如果遇到个位和十位相同的就退出脚本,注意十位数不能为0 count=0while truedo    num=$((RANDOM%100))    if ((((num/10))==0))    then        continue    else        if ((((num%10))==((num/10))))        then            break        else            echo num

两个随机数实例

/* import java.util.Random; public class random_1{ public static void main(String[] args) { Random r=new Random(); int a=r.nextInt(); System.out.print("随机数为:"+a); } } */   //以下程序与上程序效果一样 public class random_1{ public static void main(String[] ar

对比使用Charles和Fiddler两个工具及利用Charles抓取https数据(App)

原文:https://www.cnblogs.com/qingqing-919/p/8444816.html 对比使用Charles和Fiddler两个工具及利用Charles抓取https数据(App) 实验目的:对比使用Charles和Fiddler两个工具 实验对象:车易通App,易销通App 实验结果: 1.     接口数据呈现方式对比: (1) Charles树状结构呈现于屏幕,清晰易区分 (2)Fiddler默认按时间倒叙呈现所有接口数据,不易区分 个人觉得图形界面上Charles

ACM:归并排序,以及利用归并排序思想求解逆序对数!

(一)归并排序 分析: (1)划分问题:把序列分成元素个数尽量相等的两半. (2)递归求解:把两半元素分别排序. (3)合并问题:把两个有序表合并成一个.(每次只需要把两个序列的最小元素加以比较,删除其中的较小元素并加入合并后的新表) #include <iostream> using namespace std; const int MAXN = 1000; int A[MAXN], T[MAXN]; void merge_sort(int *A, int x, int y, int *T)

javascript 利用 - 枚举思想 - 添加地名的一个小例子

利用枚举思想来添加地名,主要功能是:判断点击a标签(即当前的地名)如果在ul的li不存在的话那么就添加,有则不添加,而且还提供了相应的排序功能... HTML代码: <div id="china"> <a href="javascript:;">广州</a> <a href="javascript:;">深圳</a> <a href="javascript:;"

【WPF】两则动画效果

引言 利用WPF的动画可以轻而易举的实现各种各样的特效,如擦除,滑动进入等,先看两个效果图 第一个效果 这个动画其实利用了OpacityMask和LinearGradientBrush,将画刷的两个渐变点设置在右边,再由动画控制两个渐变点在一定时差间往左边移动,形成擦除效果,如下 <Window x:Class="WpfApplication4.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml

WPF自定义控件与样式(14)-轻量MVVM模式实践

一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. MVVM是WPF中一个非常实用的编程模式,充分利用了WPF的绑定机制,体现了WPF数据驱动的优势.  图片来源:(WPF的MVVM) 关于MVVM网上很多介绍或者示例,本文不多做介绍了,本文的主要目的是提供一个轻量级的View Model实现,本文的主要内容: 依赖通知InotifyPropertyChanged实现: 命