0

我有一个ICollectionView, 调用RepozitorijumWrapper它应该根据六个字段显示我的实体。这些字段是两个TextBox和四个DateTimePicker元素。基本上,每当这些元素中的任何一个发生变化时(即使是数字/字母),我都希望列表更新。

我的DateTimePickerTextBox元素绑定到 DateTime 和字符串属性,RepozitorijumWrapper.Refresh()它们的 setter 中有代码。当我测试我的应用程序时,过滤器确实有效,但只有在您离开现场后才起作用。之后,我尝试Refresh()从控制器调用该方法,或者更确切地说,将TextChanged事件用于TextBox元素,将事件ValueChanged用于DateTimePickers。这没有任何改变。过滤器确实有效,但它并没有像我希望的那样刷新。

由于我的代码几乎是同一事物的六个副本,名称和类型都已更改,因此我将只粘贴每个相关代码部分的一个实例。

这是财产:

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;
4

1 回答 1

1

默认情况下,您对Text属性的绑定TextBox设置为仅在焦点丢失后更新属性。要更改该行为,您可以像这样指定一个值UpdateSourceTrigger

Text="{Binding Path=SifraTima, UpdateSourceTrigger=PropertyChanged}"

MSDN有更多关于 UpdateSourceTrigger 的信息

于 2013-05-30T11:24:06.573 回答