CanSearchCommandExcute 正在更新搜索按钮的 IsEnabled 属性 但 TextBox 样式没有按预期更新

CanSearchCommandExcute is updating search button's IsEnabled property but the TextBox style isn't updated as it should

我正在开发一个 wpf 应用程序,在其中一个视图中,我有一个 GroupBox,其中包含一些 TextBox、CheckBox 等和一个搜索按钮。 在该 GroupBox 下,我有一个包含 2 个 TabItems 的 TabControl。每个 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>

预期结果为:

当我打开 window 搜索按钮已启用,文本框边框为蓝色默认颜色

当我切换到第二个标签项时 搜索按钮被禁用并且文本框边框为红色,直到用户键入至少 2 个字母。

当我切换回第一个选项卡项时,应该启用搜索按钮并且文本框边框应该恢复为默认颜色。

实际结果是 当我打开 window 搜索按钮已启用,文本框边框为蓝色默认颜色,例外情况

当我切换到第二个标签项时 搜索按钮按预期被禁用,但文本框边框是默认颜色而不是红色,当我开始输入时它会变成红色,直到我输入 2 个字母。如果我删除我输入的内容,它会按预期保持红色,

现在,如果它是红色的,并且我切换回第一个选项卡项,搜索按钮会按预期再次启用,但文本框边框会一直是红色,直到我开始输入。 等等。

正确引发 CanSearchCommandExecute,导致搜索按钮正常响应,但让我感到困惑的是 TextBox 边框,它没有正常变化。

随时用 c# 回答我正在开发一个非常古老的项目,该项目在 UI 中使用 VB。

当像这样更改集合视图时,我似乎必须在绑定到文本框的 属性 上调用 OnPropertyChanged

 Public Property PersonView As ICollectionView
    Get
        Return _personView
    End Get
    Set(value As ICollectionView)
        _personView = value
        OnPropertyChanged("Enamn")

    End Set
End Property

这解决了我的问题