我有一个ICollectionView
, 调用RepozitorijumWrapper
它应该根据六个字段显示我的实体。这些字段是两个TextBox
和四个DateTimePicker
元素。基本上,每当这些元素中的任何一个发生变化时(即使是数字/字母),我都希望列表更新。
我的DateTimePicker
和TextBox
元素绑定到 DateTime 和字符串属性,RepozitorijumWrapper.Refresh()
它们的 setter 中有代码。当我测试我的应用程序时,过滤器确实有效,但只有在您离开现场后才起作用。之后,我尝试Refresh()
从控制器调用该方法,或者更确切地说,将TextChanged
事件用于TextBox
元素,将事件ValueChanged
用于DateTimePicker
s。这没有任何改变。过滤器确实有效,但它并没有像我希望的那样刷新。
由于我的代码几乎是同一事物的六个副本,名称和类型都已更改,因此我将只粘贴每个相关代码部分的一个实例。
这是财产:
public string SifraTima
{
get {return sifraTima;}
set
{
if(!sifraTima.Equals(value))
{
sifraTima = value;
RepozitorijumWrapper.Refresh();
}
}
}
这是该属性的 XAML:
<TextBox x:Name="txtSifraTima" Grid.Column="1" Grid.Row="2" Margin="3,3,30,3" Text="{Binding Path=SifraTima}" TextChanged="txtSifraTima_TextChanged" />
这是事件处理程序:
private void txtSifraTima_TextChanged(object sender, TextChangedEventArgs e)
{
presenter.RepozitorijumWrapper.Refresh();
}
这是我的 ICollectionView,在我的演示者类的构造函数中创建:
RepozitorijumWrapper = CollectionViewSource.GetDefaultView(rezervacije.Kolekcija);
RepozitorijumWrapper.Filter = itm =>
((Rezervacija)itm).SifraTerena.Contains(SifraTerena) &&
((Rezervacija)itm).SifraTima.Contains(SifraTima) &&
((Rezervacija)itm).VremeZauzimanja <= VremeZauzimanjaDo &&
((Rezervacija)itm).VremeZauzimanja >= VremeZauzimanjaOd &&
((Rezervacija)itm).VremeOslobadjanja <= VremeOslobadjanjaDo &&
((Rezervacija)itm).VremeOslobadjanja >= VremeOslobadjanjaOd;