• WPF中多源控制Button的状态


    需求描述

    1. 按钮的状态需要根据多个数据源的内容作出不同的组合判断
    2. 每个数据源的判断规则可定制

    注:以下功能感觉只是简单粗暴的实现,如果您了解更优雅的解决方案,烦请告诉我下,感谢先!

    按钮XAML

     1         <Button Name="btnOK"
     2                 Grid.Column="2"
     3                 HorizontalAlignment="Left"
     4                 VerticalAlignment="Center"
     5                 Command="{Binding Path=OKCommand}"
     6                 Content="{DynamicResource Common_Button_OK}"
     7                 IsDefault="True"
     8                 Style="{DynamicResource ButtonStyle}">
     9           <Button.IsEnabled>
    10             <MultiBinding Converter="{StaticResource InvalidMultiValidationRuleToBooleanMultiConverter}" 
    11               ConverterParameter="objectnull|greaterthanzerointeger|greaterthanzerointeger|greaterthanzerointeger">
    12               <Binding ElementName="comboBoxFilter"
    13                        Mode="OneWay"
    14                        Path="SelectedItem" />
    15               <Binding ElementName="textBoxFrameRate"
    16                        Mode="OneWay"
    17                        Path="Text" />
    18               <Binding ElementName="textBoxSizeWidth"
    19                        Mode="OneWay"
    20                        Path="Text" />
    21               <Binding ElementName="textBoxSizeHeight"
    22                        Mode="OneWay"
    23                        Path="Text" />
    24             </MultiBinding>
    25           </Button.IsEnabled>
    26         </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
      }
  • 相关阅读:
    $动态规划系列(1)——金矿模型的理解
    $Java HttpClient库的使用
    $Java-json系列(二):用JSONObject解析和处理json数据
    $百度应用引擎BAE的使用与应用部署
    利用ajax短轮询+php与服务器交互制作简易即时聊天网站
    MYSQL explain详解
    Redis 5种数据结构使用及注意事项
    Redis 存储机制
    memcache
    mysql分表和表分区详解
  • 原文地址:https://www.cnblogs.com/gaochundong/p/wpf_multi_converter_control_button_state.html
Copyright © 2020-2023  润新知