gpt4 book ai didi

c# - WPF 多绑定(bind)按钮.isEnabled 与文本框

转载 作者:太空狗 更新时间:2023-10-29 21:39:20 24 4
gpt4 key购买 nike

我是 WPF 的新手,我在网上找不到解决方案。我的问题是我希望仅当四个文本框没有有效性错误时才启用我的按钮。我的代码是:

<Button Content="Action" Click="Action_Click" >
<Button.IsEnabled>
<MultiBinding Converter="{StaticResource ValCon}">
<Binding ElementName="textBox1" />
<Binding ElementName="textBox2"/>
<Binding ElementName="textBox3"/>
<Binding ElementName="textBox4"/>
</MultiBinding>
</Button.IsEnabled>
</Button>

我的多值转换器是这样的:

class ValidityConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
bool b = true;
foreach (var x in values)
{
TextBox y = x as TextBox;
if (Validation.GetHasError(y))
{
b = false;
break;
}
}
return b;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}

我注意到这只在开始时有效。当用户修改其中一个文本框时,它不会。我的值转换器是否需要实现 INotifyPropertyChange?在 WPF 中做这样的事情的正确解决方案是什么?感谢您的帮助。

编辑

我已经做过这样的事情并且它正在工作:

                       <Button Click="Button_Click"  >
<Button.Style>
<Style TargetType="Button">
<Setter Property="IsEnabled" Value="False"/>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=(Validation.HasError), ElementName=textBox}" Value="False"/>
<Condition Binding="{Binding Path=(Validation.HasError), ElementName=textBox1}" Value="False"/>
<Condition Binding="{Binding Path=(Validation.HasError), ElementName=textBox2}" Value="False"/>
<Condition Binding="{Binding Path=(Validation.HasError), ElementName=textBox3}" Value="False"/>
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="True"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>

最佳答案

我所做的是使用您的 MultiTrigger 解决方案,但在我的情况下,我希望仅当 3 个文本框的长度为零时才激活按钮,因此我的解决方案适用于以下代码..

<Button.Style>
<Style TargetType="Button">
<Setter Property="IsEnabled" Value="True"/>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=Text.Length, ElementName=activationKeyTextbox}" Value="0"/>
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="False"/>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=Text.Length, ElementName=serialDayStartbox}" Value="0"/>
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="False"/>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=Text.Length, ElementName=serialNumdaysbox}" Value="0"/>
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="False"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>

关于c# - WPF 多绑定(bind)按钮.isEnabled 与文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23499671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com