|ZYCWPF| i:Interaction.Triggers 中的 DataTrigger 如何写组进行验证,我找不到MultDataTrigger这个方法

javamy019 2012-11-01 11:33:11

<Button x:Name="btnLogin">
<i:Interaction.Triggers>
<ei:DataTrigger Binding="{Binding ElementName=chkTypeServer,Path=IsChecked}" Comparison="Equal" Value="True">
<ei:ChangePropertyAction PropertyName="IsEnabled" Value="True"></ei:ChangePropertyAction>
</ei:DataTrigger>
<ei:DataTrigger Binding="{Binding ElementName=chkTypeClient,Path=IsChecked}" Comparison="Equal" Value="True">
<ei:ChangePropertyAction PropertyName="IsEnabled" Value="True"></ei:ChangePropertyAction>
</ei:DataTrigger>
</i:Interaction.Triggers>
连接
</Button>

但我现在只能实现

if(chkTypeServer.IsChecked = true)
{
btnLogin.IsEnabled = true;
}
if(chkTypeClient.IsChecked = true)
{
btnLogin.IsEnabled = true;
}

如上,我想实现

if(chkTypeServer.IsChecked = true || chkTypeClient.IsChecked = true)
{
btnLogin.IsEnabled = true;
}
else
{
btnLogin.IsEnabled = false;
}

那这个DataTrigger应该怎么写呢?

万分感谢
...全文
298 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
javamy020 2012-11-01
  • 打赏
  • 举报
回复
不好意思。。。刚是没有,重新打开页面后就有了,晕死
jshi123 2012-11-01
  • 打赏
  • 举报
回复
javamy019 2012-11-01
  • 打赏
  • 举报
回复
你好。我的XAML里面怎么没有
<MultiBinding >
这个标记呢?
谢谢
jshi123 2012-11-01
  • 打赏
  • 举报
回复
你这个需求有简单的实现方法,用多重绑定:

<CheckBox Name="chkTypeServer">Server</CheckBox>
<CheckBox Name="chkTypeClient">Client</CheckBox>
<Button x:Name="btnLogin">
<Button.Resources>
<local:OrConverter x:Key="Or" />
</Button.Resources>
<Button.IsEnabled>
<MultiBinding Converter="{StaticResource Or}">
<Binding ElementName="chkTypeServer" Path="IsChecked" />
<Binding ElementName="chkTypeClient" Path="IsChecked" />
</MultiBinding>
</Button.IsEnabled>
连接
</Button>

后台写个多个条件的合并转化类:

public class OrConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return values.OfType<bool>().Any(x => x);
}

public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}

jshi123 2012-11-01
  • 打赏
  • 举报
回复
因为在xaml中不能写else,所以逻辑应该是这样:

if (chkTypeServer.IsChecked == true || chkTypeClient.IsChecked == true)
{
btnLogin.IsEnabled = true;
}
if (chkTypeServer.IsChecked == false && chkTypeClient.IsChecked == false)
{
btnLogin.IsEnabled = false;
}


xmal:

<Window.Resources>
<ei:ConditionBehavior x:Key="ServerOrClientChecked" x:Shared="False">
<ei:ConditionalExpression ForwardChaining="Or">
<ei:ComparisonCondition LeftOperand="{Binding IsChecked, ElementName=chkTypeServer}"
Operator="Equal"
RightOperand="True"/>
<ei:ComparisonCondition LeftOperand="{Binding IsChecked, ElementName=chkTypeClient}"
Operator="Equal"
RightOperand="True"/>
</ei:ConditionalExpression>
</ei:ConditionBehavior>
<ei:ConditionBehavior x:Key="ServerAndClientNotChecked" x:Shared="False">
<ei:ConditionalExpression ForwardChaining="And">
<ei:ComparisonCondition LeftOperand="{Binding IsChecked, ElementName=chkTypeServer}"
Operator="Equal"
RightOperand="False"/>
<ei:ComparisonCondition LeftOperand="{Binding IsChecked, ElementName=chkTypeClient}"
Operator="Equal"
RightOperand="False"/>
</ei:ConditionalExpression>
</ei:ConditionBehavior>
</Window.Resources>
<StackPanel>
<CheckBox Name="chkTypeServer">Server</CheckBox>
<CheckBox Name="chkTypeClient">Client</CheckBox>
<Button x:Name="btnLogin">
<i:Interaction.Triggers>

<ei:PropertyChangedTrigger Binding="{Binding IsChecked, ElementName=chkTypeServer}">
<i:Interaction.Behaviors><StaticResource ResourceKey="ServerOrClientChecked" /></i:Interaction.Behaviors>
<ei:ChangePropertyAction PropertyName="IsEnabled" Value="True" />
</ei:PropertyChangedTrigger>
<ei:PropertyChangedTrigger Binding="{Binding IsChecked, ElementName=chkTypeClient}">
<i:Interaction.Behaviors><StaticResource ResourceKey="ServerOrClientChecked" /></i:Interaction.Behaviors>
<ei:ChangePropertyAction PropertyName="IsEnabled" Value="True" />
</ei:PropertyChangedTrigger>

<ei:PropertyChangedTrigger Binding="{Binding IsChecked, ElementName=chkTypeServer}">
<i:Interaction.Behaviors><StaticResource ResourceKey="ServerAndClientNotChecked" /></i:Interaction.Behaviors>
<ei:ChangePropertyAction PropertyName="IsEnabled" Value="False" />
</ei:PropertyChangedTrigger>
<ei:PropertyChangedTrigger Binding="{Binding IsChecked, ElementName=chkTypeClient}">
<i:Interaction.Behaviors><StaticResource ResourceKey="ServerAndClientNotChecked" /></i:Interaction.Behaviors>
<ei:ChangePropertyAction PropertyName="IsEnabled" Value="False" />
</ei:PropertyChangedTrigger>

</i:Interaction.Triggers>
连接
</Button>
</StackPanel>


111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧