- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想让按钮的 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/
我遇到过这个 html: 上面的html和这个有什么区别: 最佳答案 来自MDN page on the tag : 对于 type 的属性标签,可能的值是: 提交:按钮将表单数据提交给服务器
Button button= (Button) findViewbyID(R.id.button); 和 Button button = new Button(this); 有什么区别? 最佳答案 有
我是一名优秀的程序员,十分优秀!