關(guān)于WPF使用MultiConverter控制Button狀態(tài)的詳細(xì)介紹_.Net教程

      編輯Tag賺U幣
      教程Tag:WPFButton添加

      推薦:基于自定義Unity生存期模型PerCallContextLifeTimeManager的問(wèn)題
      本篇文章小編將為大家介紹,基于自定義Unity生存期模型PerCallContextLifeTimeManager的問(wèn)題。需要的朋友參考下

      需求描述
      1.按鈕的狀態(tài)需要根據(jù)多個(gè)數(shù)據(jù)源的內(nèi)容作出不同的組合判斷
      2.每個(gè)數(shù)據(jù)源的判斷規(guī)則可定制
      注:以下功能感覺(jué)只是簡(jiǎn)單粗暴的實(shí)現(xiàn),如果您了解更優(yōu)雅的解決方案,煩請(qǐng)告訴我下,感謝先!

      按鈕XAML

      復(fù)制代碼 代碼如下:www.wf0088.com

      <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判斷
      復(fù)制代碼 代碼如下:www.wf0088.com

      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 C#實(shí)現(xiàn)下載文件的六種方法實(shí)例
      asp.net C#實(shí)現(xiàn)下載文件的六種方法實(shí)例,需要的朋友可以參考一下

      來(lái)源:模板無(wú)憂(yōu)//所屬分類(lèi):.Net教程/更新時(shí)間:2013-04-22
      相關(guān).Net教程