手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >关于WPF使用MultiConverter控制Button状态的详细介绍
关于WPF使用MultiConverter控制Button状态的详细介绍
摘要:需求描述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

}

【关于WPF使用MultiConverter控制Button状态的详细介绍】相关文章:

使用linq读取分隔符文本文件

asp.net发邮件的几种方法汇总

[.net] 操纵自如-页面内的配合与通信

repeater分页 内容显示

asp.net使用jquery模板引擎jtemplates呈现表格

asp.net Hashtable 遍历写法

VC++根据explorer.exe进程检测用户是否已登录

asp.net中调用winrar实现压缩解压缩的代码

Microsoft SQL Server 2005 Express 远程访问设置详述,100%成功篇

使用UserControl做网站导航条的思路 分析

精品推荐
分类导航