我有一個文本框和一個列表框隱藏ListBoxItems不工作
<TextBox FontSize="12pt" Text="{Binding NameFilter, UpdateSourceTrigger=PropertyChanged}" />
<ListBox x:Name="EmployeeList" ItemsSource="{Binding EmployeeList}">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsVisible}" Value="False">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsVisible}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
物業我的視圖模型的
public string NameFilter
{
get { return _nameFilter; }
set {
_nameFilter = value;
FilterEmployees();
}
}
FilterEmployees設置每個員工的屬性IsVisible爲true或false。
我有兩個問題:
1) 我二傳手獲取每個用戶輸入後打來電話,我得到EmployeeList的過濾。
獲得呼叫。但是我看不到我的清單更新。
2.) 當我手動更新我的列表(通過另一個函數)項目消失。但他們永遠不會重蹈覆轍。當輸入字符串爲空(在調試器中檢查它)時,我的過濾器將所有內容設置爲IsVisible = true。但不會發生UI更新。
我錯過了什麼?我用這個答案,但是這似乎不是我的問題,因爲它的工作原理,如果我觸發我的計劃內的另一個動作是更新列表: WPF - hiding listbox items
編輯: 我整理我的項目(實際移動它們裏面的ObsservableCollection)。通過這種方式可以看到變化(員工被隱藏)。但這只是隱藏起來,他們從不收割。
看起來好像整個東西被觸發得晚了。我只想要名字中帶有「m」的員工。我必須手動刷新列表兩次。有時候還剩下一些用戶,他們的名字中沒有「m」。
發佈'FilterEmployees()',這樣我們就可以看到你在做什麼。另外,還有一些更好的過濾方法,例如使用Reactive(Rx),他們有很好的過濾教程。 – Kcvin