关于WPF使用MultiConverter控制Button状态的详细介绍_asp.net教程-查字典教程网
关于WPF使用MultiConverter控制Button状态的详细介绍
关于WPF使用MultiConverter控制Button状态的详细介绍
发布时间:2016-12-29 来源:查字典编辑
摘要:需求描述1.按钮的状态需要根据多个数据源的内容作出不同的组合判断2.每个数据源的判断规则可定制注:以下功能感觉只是简单粗暴的实现,如果您了解...

需求描述

1.按钮的状态需要根据多个数据源的内容作出不同的组合判断

2.每个数据源的判断规则可定制

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

按钮XAML

复制代码 代码如下:

<Button Name="btnOK"

Grid.Column="2"

HorizontalAlignment="Left"

VerticalAlignment="Center"

Command="{Binding Path=OKCommand}"

Content="{DynamicResource Common_Button_OK}"

IsDefault="True"

>

<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教程学习
    热门asp.net教程学习
    编程开发子分类