关于WPF使用MultiConverter控制Button状态的详细介绍

 更新时间:2013年04月18日 10:45:08   作者:  
本篇文章小编将为大家介绍,关于WPF使用MultiConverter控制Button状态的详细介绍。需要的朋友参考下

需求描述
1.按钮的状态需要根据多个数据源的内容作出不同的组合判断
2.每个数据源的判断规则可定制
注:以下功能感觉只是简单粗暴的实现,如果您了解更优雅的解决方案,烦请告诉我下,感谢先!

按钮XAML

复制代码 代码如下:

<Button Name="btnOK"
                 Grid.Column="2"
                 HorizontalAlignment="Left"
                 VerticalAlignment="Center"
                 Command="{Binding Path=OKCommand}"
                 Content="{DynamicResource Common_Button_OK}"
                 IsDefault="True"
                 Style="{DynamicResource ButtonStyle}">
           <Button.IsEnabled>
             <MultiBinding Converter="{StaticResource InvalidMultiValidationRuleToBooleanMultiConverter}"
               ConverterParameter="objectnull|greaterthanzerointeger|greaterthanzerointeger|greaterthanzerointeger">
               <Binding ElementName="comboBoxFilter"
                        Mode="OneWay"
                        Path="SelectedItem" />
               <Binding ElementName="textBoxFrameRate"
                        Mode="OneWay"
                        Path="Text" />
               <Binding ElementName="textBoxSizeWidth"
                        Mode="OneWay"
                        Path="Text" />
               <Binding ElementName="textBoxSizeHeight"
                        Mode="OneWay"
                        Path="Text" />
             </MultiBinding>
           </Button.IsEnabled>
         </Button>

MultiConverter判断
复制代码 代码如下:

public class InvalidMultiValidationRuleToBooleanMultiConverter : IMultiValueConverter
  {
    #region IMultiValueConverter Members

    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
      string[] paramlist = ((string)parameter).Split('|');
      if (paramlist == null || paramlist.Length <= 0)
      {
        throw new ArgumentNullException("parameter");
      }
      int length = paramlist.Length;

      IList<bool> boollist = new List<bool>();

      for (int i = 0; i < paramlist.Length; i++)
      {
        switch (paramlist[i].ToLowerInvariant())
        {
          case "checknameexisted":
            boollist.Add(ValidationRuleHelper.Validate<InvalidCheckNameExistedValidationRule>(values[i]));
            break;
          case "directoryandfileexist":
            boollist.Add(ValidationRuleHelper.Validate<InvalidDirectoryAndFileExistValidationRule>(values[i]));
            break;
          case "greaterthanzerointeger":
            boollist.Add(ValidationRuleHelper.Validate<InvalidGreaterThanZeroIntegerValidationRule>(values[i]));
            break;
          case "numericnull":
            boollist.Add(ValidationRuleHelper.Validate<InvalidNumericNullValidationRule>(values[i]));
            break;
          case "stringlength":
            boollist.Add(ValidationRuleHelper.Validate<InvalidStringLengthValidationRule>(values[i]));
            break;
          case "stringnullorempty":
            boollist.Add(ValidationRuleHelper.Validate<InvalidStringNullOrEmptyValidationRule>(values[i]));
            break;
          case "ipaddress":
            boollist.Add(ValidationRuleHelper.Validate<InvalidIPAddressValidationRule>(values[i]));
            break;
          case "objectnull":
          default:
            boollist.Add(ValidationRuleHelper.Validate<InvalidObjectNullValidationRule>(values[i]));
            break;
        }
      }

      bool result = boollist[0];
      for (int i = 1; i < boollist.Count; i++)
      {
        result = result & boollist[i];
      }

      return result;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
      return null;
    }

    #endregion
  }

相关文章

  • ASP.NET OutputCache详解

    ASP.NET OutputCache详解

    这篇文章主要介绍了ASP.NET OutputCache详解,本文详细讲解了OutputCache的语法、OutputCache的参数、OutputCache使用示例等内容,需要的朋友可以参考下
    2015-06-06
  • asp.net下用js实现鼠标移至小图,自动显示相应大图

    asp.net下用js实现鼠标移至小图,自动显示相应大图

    asp.net下用js实现鼠标移至小图,自动显示相应大图...
    2007-03-03
  • asp.net Reporting Service在Web Application中的应用

    asp.net Reporting Service在Web Application中的应用

    由于我们这个项目中使用微软的报表服务(Reporting Services)作为报表输出工具,本人也对它进行一点点研究,虽没有入木三分,但这点知识至少可以在大部分Reporting Service的场景中应用。
    2008-11-11
  • Asp.net中使用Sqlite数据库的方法

    Asp.net中使用Sqlite数据库的方法

    Sqlite是最近比较流行的数据库了,拥有比Access高效快速,易操作易实施。完全不需要在客户端进行任何的配置,只需要在站点中引用入DLL文件即可使用了。
    2009-11-11
  • asp.net中MVC借助Iframe实现无刷新上传文件实例

    asp.net中MVC借助Iframe实现无刷新上传文件实例

    这篇文章主要介绍了asp.net中MVC借助Iframe实现无刷新上传文件的方法,详细分析了前端界面、回调函数与后台处理的详细流程,非常具有参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • 小心!ASP.NET网站发布时的那些坑

    小心!ASP.NET网站发布时的那些坑

    ASP.NET网站发布时的那些坑,要小心了,为什么网站发布后,每个页面第一次打开都很卡?ASP.NET session 频繁丢失如何解决?具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • asp.net core 多文件分块同时上传的组件

    asp.net core 多文件分块同时上传的组件

    分享一个可多个文件同时上传、断点续传,并实时反馈上传进度的 Asp.Net core 组件,本文通过实例代码对asp.net core 多文件分块同时上传的组件知识介绍的非常详细,感兴趣的朋友一起看看吧
    2023-12-12
  • ASP.Net开发常见的一些问题总结

    ASP.Net开发常见的一些问题总结

    ASP.Net开发常见的一些问题总结,需要的朋友可以参考一下
    2013-02-02
  • .Net Core配置Configuration具体实现

    .Net Core配置Configuration具体实现

    这篇文章主要介绍了.Net Core配置Configuration具体实现,文中运用大量代码进行讲解,如果有对相关知识感兴趣的小伙伴可以参考这篇文章,希望可以帮助到你
    2021-09-09
  • 实例说明asp.net中的简单角色权限控制

    实例说明asp.net中的简单角色权限控制

    权限控制在信息管理中属于基本功能,权限控制中其中以Window权限为模型的角色用户(也称用户组用户)模型使用较多。本文以网站管理后台权限控制为例简要说明。
    2009-10-10

最新评论