【发布时间】:2021-12-29 10:55:19
【问题描述】:
我正在开发一个 wpf 应用程序,在其中一个视图中,我有一个 GroupBox,其中包含一些 TextBoxes、CheckBoxes ..etc 和一个搜索按钮。 在那个 GroupBox 下我有一个 TabControl,它有 2 个 TabItems。每个 TabItem 显示连接到不同数据库的不同 DatGrid,上面的 GroupBox 用于从 TextBox 执行搜索命令并使用其余元素进行过滤。其中一个数据库很大,所以如果少于 2 个字母,我需要阻止用户执行搜索,但用户应该能够调用另一个数据库中的所有内容。我在视图模型中实现了 IDataErrorInfo,我的 CanSearchCommandExecute 方法如下所示:
Public Overrides Function CanSearchCommandExecute(obj As Object) As Boolean
Dim vm As PersonSearchViewModel = TryCast(obj, PersonSearchViewModel)
If vm IsNot Nothing Then
If vm.PersonView Is CollectionViewSource.GetDefaultView(vm.PersonDataGridList) Then
Return True
End If
End If
If vm IsNot Nothing Then
If vm.IPIDataGrid IsNot Nothing Then
If Item("Enamn") IsNot Nothing Then
Return False
End If
End If
End If
Return PersonDataGridList IsNot Nothing
End Function
在我的 Xaml 文件中,搜索按钮如下所示:
<Button Command="{Binding SearchCommand}" IsDefault="{Binding ElementName=txtEnamn , Path=IsKeyboardFocused}" CommandParameter="{Binding}" Content="_Sök" Grid.Column="8"
Height="23" Width="100" HorizontalAlignment="Left"
x:Name="btnSearch" ToolTip="Klicka eller tryck på enter för att söka." />
绑定到搜索命令的文本框如下所示:
<TextBox Grid.Column="1" AutomationProperties.AutomationId="Enamn" x:Name="txtEnamn" ToolTip="Sök efternamn. Söker även i fälten förnamn, pseudonym och viktigt info."
>
<TextBox.Text >
<Binding Path="Enamn" ValidatesOnDataErrors="True" ValidatesOnExceptions="True" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<DataErrorValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
预期结果是:
当我打开窗户 搜索按钮已启用,文本框边框为蓝色默认颜色
当我切换到第二个标签项时 搜索按钮被禁用,文本框边框为红色,直到用户输入至少 2 个字母。
当我切换回第一个选项卡项时,应启用搜索按钮,并且文本框边框应返回默认颜色。
实际结果是 当我打开窗户 搜索按钮已启用,文本框边框为蓝色默认颜色,但除外
当我切换到第二个标签项时 搜索按钮按预期被禁用,但文本框边框是默认颜色而不是红色,当我开始输入时它变成红色,直到我输入 2 个字母。如果我删除我输入的内容,它会按预期保持红色,
现在,如果它是红色的,并且我切换回第一个选项卡项,则搜索按钮会按预期再次启用,但文本框边框继续为红色,直到我开始输入。 等等。
CanSearchCommandExecute 被正确引发,导致搜索按钮按应有的方式响应,但让我感到困惑的是 TextBox 边框,它并没有按应有的方式改变。
随意用 c# 回答我正在做一个在 UI 中使用 VB 的非常古老的项目。
【问题讨论】:
标签: c# wpf vb.net xaml idataerrorinfo