• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    关于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;

          IListbool> boollist = new Listbool>();

          for (int i = 0; i paramlist.Length; i++)
          {
            switch (paramlist[i].ToLowerInvariant())
            {
              case "checknameexisted":
                boollist.Add(ValidationRuleHelper.ValidateInvalidCheckNameExistedValidationRule>(values[i]));
                break;
              case "directoryandfileexist":
                boollist.Add(ValidationRuleHelper.ValidateInvalidDirectoryAndFileExistValidationRule>(values[i]));
                break;
              case "greaterthanzerointeger":
                boollist.Add(ValidationRuleHelper.ValidateInvalidGreaterThanZeroIntegerValidationRule>(values[i]));
                break;
              case "numericnull":
                boollist.Add(ValidationRuleHelper.ValidateInvalidNumericNullValidationRule>(values[i]));
                break;
              case "stringlength":
                boollist.Add(ValidationRuleHelper.ValidateInvalidStringLengthValidationRule>(values[i]));
                break;
              case "stringnullorempty":
                boollist.Add(ValidationRuleHelper.ValidateInvalidStringNullOrEmptyValidationRule>(values[i]));
                break;
              case "ipaddress":
                boollist.Add(ValidationRuleHelper.ValidateInvalidIPAddressValidationRule>(values[i]));
                break;
              case "objectnull":
              default:
                boollist.Add(ValidationRuleHelper.ValidateInvalidObjectNullValidationRule>(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
      }

    您可能感兴趣的文章:
    • 解析WPF绑定层次结构数据的应用详解
    • WPF的数据绑定详细介绍
    • wpf将表中数据显示到datagrid示例
    • 在WinForm和WPF中使用GMap.Net地图插件简单教程
    • 用WPF实现屏幕文字提示的实现方法
    • 解析WPF实现音频文件循环顺序播放的解决方法
    • 深入分析WPF客户端读取高清图片卡以及缩略图的解决方法详解
    • 关于WPF异步MVVM等待窗体的介绍
    • 在Winform和WPF中注册全局快捷键实现思路及代码
    • WPF制作一个简单的倒计时器实例附源码
    • WPF绑定实例详解
    上一篇:GridView自动增加序号(三种实现方式)
    下一篇:Repeater控件动态变更列(Header,Item和Foot)信息实现思路
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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