• Silverlight中使用MVVM(9)绑定Enum类型数据


    Silverlight中使用MVVM(1)--基础

    Silverlight中使用MVVM(2)—提高

    Silverlight中使用MVVM(3)—进阶

    Silverlight中使用MVVM(4)—演练

    Silverlight中使用MVVM(5)-Command II

    Silverlight中使用MVVM(6):AutoComplteBox的异步过滤

    Silverlight中使用MVVM(7):DataGrid中触发Button的Click事件

    Silverlight中使用MVVM(8)-使用AttachedProperty关闭ChildWindow

        在实际开发程序的过程中,不乏处理枚举类型的情形, 比如在Code-Behind的方式下处理RadionButton是很容易的,但是如果在纯MVVM模式下通过绑定的方式

    可能需要你花费不少的时间,本文提供MVVM模式下处理RadionButton与枚举类型绑定的一种方式:

          首先看张效果图:

         image

         我们要做的事情很简单,就是将枚举的属性值绑定到RadioButton上,有了本系列前面几篇文章的基础,我相信建立一个MVVM的框架已经了然于心了,所以本篇的重点集中

    在ViewModel和View中.

         首先我们构建一个枚举类型,ViewModel代码如下:

     public class ShellViewModel :PropertyChangedBase,IShell
      {
          private SwapDuteType _currentSwapOffDuteType;
          public SwapDuteType CurrentSwapOffDuteType
          {
              get { return _currentSwapOffDuteType; }
              set { _currentSwapOffDuteType = value;
                  NotifyOfPropertyChange(() =>CurrentSwapOffDuteType );
              }
          }
          public ShellViewModel()
          {
              _currentSwapOffDuteType = SwapDuteType.TM;
          }
       }
      public enum SwapDuteType
        {
          TM, AM,PM
        }

          ViewModel中仅仅创建了一个枚举类型的属性,我们在View中放3个RadionButton:

    <RadioButton  x:Name="tm" GroupName="t"
                       IsChecked="{Binding CurrentSwapOffDuteType, ConverterParameter=TM, Converter={StaticResource EnumConverter}, Mode=TwoWay}" 
                       IsThreeState="False"    Content="全天" VerticalAlignment="Center" Margin="5,0">
    </RadioButton>
    <RadioButton  x:Name="am"  IsThreeState="False"  GroupName="a" 
                    IsChecked="{Binding CurrentSwapOffDuteType, ConverterParameter=AM, Converter={StaticResource EnumConverter}, Mode=TwoWay}"
                    Content="上午"  VerticalAlignment="Center" Margin="5,0">
    </RadioButton>
    <RadioButton x:Name="pm"  GroupName="p" 
                                IsChecked="{Binding CurrentSwapOffDuteType, ConverterParameter=PM, Converter={StaticResource EnumConverter}, Mode=TwoWay}"
                IsThreeState="False"    Content="下午" VerticalAlignment="Center" Margin="5,0">

          关键的地方在于我们用的Converter, 这里其实主要是关于Enum.Parse()的使用:

        public class EnumConverter : IValueConverter
       {
           public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
           {
               if (value == null || parameter == null)
                   return value;
     
               return value.ToString() == parameter.ToString();
           }
     
           public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
           {
               if (value == null || parameter == null)
                   return value;
               return Enum.Parse(targetType, (String)parameter, true);
           }
       }

        这样我们就完成了最基本的View/ViewModel的内容,本系列前几篇都是以RelayCommand的方式处理View与ViewModel的联系,大约1年前我写了关于介绍Caliburn的几篇入门文章,

    此后一直关注这个框架,但是由于当时产品已经初有成效,所以并未在实际的项目中采用,而现在它的精简版本Caliburn.Mirco甚至超越了Caliburn本身,随着产品的稳定,我也开始着手改善产品的架构.

    自然不会在原来的源代码上修改了,毕竟思想不完全一样,否则反而会得不偿失.目前是倾向于使用Caliburn.Mirco重构客户端的代码,至少目前主要用到的特性比如Conventions,Actions都是挺不错的.

       因此本文源码中使用Cailburn.Mirco作为MVVM的框架,包括本系列的后续教程都会在此基础上,顺便会涉及该框架的一些使用.  

      

       源码下载:EnumInMVVM.rar

  • 相关阅读:
    在IIS中为SQL Server 2008配置报表服务
    安装VS2008 SP1
    SQL Server 2008正式发布了,示例数据库安装
    order by居然不能直接在union子句中使用
    如何让TabContainer居左
    公布下SQL Server 2008 RC0英文版下载地址
    BIT类型在SQL Server中的存储大小
    使用Windows照片库修改图片后记得清理原始图片副本
    老赵面试题参考答案(一)
    漂亮的系统后台UI 欣赏
  • 原文地址:https://www.cnblogs.com/626498301/p/2512958.html
Copyright © 2020-2023  润新知