我正在開發一個 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 如下所示:
<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 的非常古老的專案。
uj5u.com熱心網友回復:
似乎在像這樣更改集合視圖時,我必須在系結到文本框的屬性上呼叫 OnPropertyChanged
Public Property PersonView As ICollectionView
Get
Return _personView
End Get
Set(value As ICollectionView)
_personView = value
OnPropertyChanged("Enamn")
End Set
End Property
這解決了我的問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/409079.html
標籤:
