gpt4 book ai didi

c# - 使 Button IsEnabled 状态取决于两个文本框

转载 作者:太空宇宙 更新时间:2023-11-03 21:56:21 26 4
gpt4 key购买 nike

我想让按钮的 IsEnabled 仅在两个文本框没有任何错误时才为真(在这种情况下,我只希望它们都是数字)

我尝试将文本框设置为 NotifyOnValidationError=True,认为这会引发一个异常,该异常会冒泡到容器控件 - 然后我会根据属于该控件的 Validation.HasError 附加属性将 Button 的 IsEnabled 设置为 true

我尝试了以下方法(删除了格式化代码)但它不起作用(当我第一次启动应用程序时启用了按钮并且文本框为空 - 它们绑定(bind)到可为空的小数)

<WrapPanel>
<TextBox x:Name="txtDeltaMin"Text="{Binding Path=DeltaMinFilter, NotifyOnValidationError=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}"></TextBox>
<TextBox x:Name="txtDeltaMax" Text="{Binding Path=DeltaMaxFilter, NotifyOnValidationError=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}"></TextBox>
<Button x:Name="btnUpdateFilter" Click="btnUpdateFilter_Click" IsEnabled="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type WrapPanel}}, Path=(Validation.HasError)}">Filter</Button>
</WrapPanel>

最佳答案

您可以使用 MultiBinding .应该看起来像这样:

<TextBox Text="{Binding Path=DeltaMinFilter, NotifyOnValidationError=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" />
<TextBox x:Name="txtDeltaMax" Text="{Binding Path=DeltaMaxFilter, NotifyOnValidationError=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" />
<Button x:Name="btnUpdateFilter" Click="btnUpdateFilter_Click" Content="Filter">
<Button.IsEnabled>
<MultiBinding Converter="{StaticResource IsEnabledConverter}">
<Binding ElementName="txtDeltaMin" Path="Validation.HasError" />
<Binding ElementName="txtDeltaMax" Path="Validation.HasError" />
</MultiBinding>
</Button.IsEnabled>
</Button>

然后您只需通过实现IMultiValueConverter 来创建IsEnabledConverter 类,并将其添加为资源。

public class IsEnabledConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
foreach (var isValid in values)
if (isValid as bool? == false)
return false;
return true;
}

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

关于c# - 使 Button IsEnabled 状态取决于两个文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12066097/

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