【问题标题】:CanSearchCommandExcute is updating search button's IsEnabled property but the TextBox style isn't updated as it shouldCanSearchCommandExcute 正在更新搜索按钮的 IsEnabled 属性,但 TextBox 样式未按应有的方式更新
【发布时间】: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


    【解决方案1】:

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

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

    这解决了我的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 2015-10-04
      • 2020-09-02
      • 2015-12-10
      • 1970-01-01
      • 2016-05-21
      • 2013-03-28
      相关资源
      最近更新 更多