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

先看看最终图:

aaarticlea/png;base64,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" alt="" />

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

由于逻辑比较简单,不用写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(, );
RndB = rnd.Next(, );
}
}

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="" x:Name="textBlock" TextWrapping="Wrap" Text="数字1:"/>
<TextBlock Margin="" x:Name="textBlock1" Grid.Column="" TextWrapping="Wrap" Text="{Binding RndA}"/>
<TextBlock Margin="" x:Name="textBlock2" Grid.Column="" TextWrapping="Wrap" Text="数字2:"/>
<TextBlock Margin="" x:Name="textBlock3" Grid.Column="" TextWrapping="Wrap" Text="{Binding RndB}"/> <Button Grid.Row="" Command="{Binding ReNewRndNumCommand}" Grid.ColumnSpan="" Width="" Margin="">重新生成数</Button>
<Button x:Name="button" Command="{Binding CompareCommand}" Margin="" Content="比较大小" Grid.ColumnSpan="" Grid.Row="" Grid.Column="" Width=""/> <TextBlock x:Name="textBlock4" Margin="" HorizontalAlignment="Center" Grid.Column="" Grid.Row="" Grid.ColumnSpan="" TextWrapping="Wrap" Text="{Binding Result}"/> </Grid>

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

public MainWindow()
{
InitializeComponent(); this.DataContext = new MainWindowViewModel();
}

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

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

  1. 【WPF】两则动画效果

    原文:[WPF]两则动画效果 引言 利用WPF的动画可以轻而易举的实现各种各样的特效,如擦除,滑动进入等,先看两个效果图 第一个效果 这个动画其实利用了OpacityMask和LinearGradie ...

  2. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

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

    我们在做iOS开发过程中,静态页面的开发比开发动态页面更让我们开发者抓狂.因为动态页面通常是一个页面一种cell样式,作为开发者只需要专注于定制好一种样式之后,就可以使用数据填充出较好的界面.而静态c ...

  4. WPF: 自动设置Owner的ShowDialog 适用于MVVM

    原文:WPF: 自动设置Owner的ShowDialog 适用于MVVM 原文地址:http://www.mgenware.com/blog/?p=339 WPF中的Windows的ShowDialo ...

  5. VS编程,WPF中两个滚动条 ScrollViewer 同步滚动的一种方法

    原文:VS编程,WPF中两个滚动条 ScrollViewer 同步滚动的一种方法 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/ar ...

  6. WPF系列教程——(二)使用Prism实现MVVM设计模式 - 简书

    原文:WPF系列教程--(二)使用Prism实现MVVM设计模式 - 简书 本文假设你已经知道MVVM设计模式是什么,所以直接进入正题,今天我们就用Prism来实现WPF的MVVM设计模式,百度上关于 ...

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

    对比使用Charles和Fiddler两个工具及利用Charles抓取https数据(App) 实验目的:对比使用Charles和Fiddler两个工具 实验对象:车易通App,易销通App 实验结果 ...

  8. WPF的两棵树与绑定

    原文:WPF的两棵树与绑定   先建立测试基类 public class VisualPanel : FrameworkElement { protected VisualCollection Chi ...

  9. WPF在3D Cad模型中利用TextureCoordinates实现颜色渐变显示偏差值的变化

    原文:WPF在3D Cad模型中利用TextureCoordinates实现颜色渐变显示偏差值的变化 注:最近在做3D机械模型重建方面的软件,需要根据光栅传感器采集的数据绘制3D图形,并显示出色差以及 ...

随机推荐

  1. PS灰度蒙版建立

    通道里: 建立高光 1.Ctrl + 鼠标单击RGB通道-->得到高光 点击蒙版-->得到Alpha1(重命名高光通道): 2.然后紧接着Ctrl + shift + alt +鼠标单击A ...

  2. PHP.51-TP框架商城应用实例-前台3-楼层推荐、TP框架雪崩问题

    楼层推荐 效果图 1.增加表字段 商品表   分类表 2.修改商品模型和分类模型接收字段is_floor 3.修改商品和分类相关的表单 4.后台制作推荐方法 4.1在分类模型中增加获取前台楼层数据的方 ...

  3. 20145234黄斐《网络对抗技术》实验一,逆向及Bof基础实践

    实践内容 本次实践的对象是一个名为hf20145234的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段, ...

  4. WPF Prism MVVM 中 弹出新窗体. 放入用户控件

    原文:WPF Prism MVVM 中 弹出新窗体. 放入用户控件 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_37214567/artic ...

  5. 北京Uber优步司机奖励政策(1月21日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  6. FCL中你不得不知的几种委托

    FCL中丰富的类库信息极大的方便了我们的编码,很多我们日常经常用到的类型,FCL中已经帮我们定义好,下面要介绍的就是FCL中定义好的几种委托类型,直接使用它们不仅能提高我们的编码效率,而且还能让我们的 ...

  7. AFD运维

    1.afd 网址:https://www.dwd.de/AFD/html-en/contents.html 2.问题:拷贝了一个主机A配置后(HOST_CONFIG主机项),修改为另一个主机B配置:然 ...

  8. CSS随笔3

    1. CSS部分简洁使用 * background-radious:使得边框角“圆化”. * background:pink  url(“图片路径”)  no-repeat: * border 可以有 ...

  9. Python :编写条件分支代码的技巧

    『Python 工匠』是什么? 我一直觉得编程某种意义是一门『手艺』,因为优雅而高效的代码,就如同完美的手工艺品一样让人赏心悦目. 在雕琢代码的过程中,有大工程:比如应该用什么架构.哪种设计模式.也有 ...

  10. 《Effective C++》读书笔记 条款03 尽可能使用const 使代码更加健壮

    如果你对const足够了解,只需记住以下结论即可: 将某些东西声明为const可帮助编译器侦测出错误用法,const可被施加于任何作用于内的对象.函数参数.函数返回类型.成员函数本体. 编译器强制实施 ...