zoukankan      html  css  js  c++  java
  • 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();
    }

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

  • 相关阅读:
    python执行命令行调试工具pdb
    py常用标准库
    Python的 垃圾回收机制
    私有化 : _x: 单前置下划线,私有化属性或方法;__xx:双前置下划线;__xx__:双前后下划线;属性property
    python 解析docx文档将文档名修改为docx里的合同编号
    LINUX7 HA(mysql)
    datax oracle到mysql数据抽取
    SQL优化案例(谓词越界)
    How to Find which Session is Holding a Particular Library Cache Lock (Doc ID 122793.1)
    窗口函数
  • 原文地址:https://www.cnblogs.com/lunawzh/p/4803075.html
Copyright © 2011-2022 走看看