2013-05-30 2 views
0

나는 RepozitorijumWrapper이라는이라는 글자가 있습니다.이 글자는 6 개의 필드를 기반으로 내 개체를 표시해야합니다. 필드는 두 개의 TextBox 및 네 개의 DateTimePicker 요소입니다. 기본적으로 이러한 요소가 변경 될 때마다 (번호/문자로도) 목록을 업데이트하고 싶습니다.WPF : ICollectionView.Refresh() UIElement가 텍스트 및 값 변경 대신 포커스를 잃을 때만 새로 고침

DateTimePickerTextBox 요소는 설정자에 RepozitorijumWrapper.Refresh() 코드가있는 DateTime 및 문자열 속성에 바인딩됩니다. 응용 프로그램을 테스트 할 때 필터가 작동했지만 한 번 필드를 벗어났습니다. 그 후 컨트롤러에서 Refresh() 메서드를 호출하거나 TextBox 요소의 경우 TextChanged 이벤트를 사용하고 DateTimePicker 인 경우 ValueChanged 메서드를 호출했습니다. 이것은 아무것도 바뀌지 않았습니다. 필터가 작동하지만 새로 고침하는 방식으로 필터가 새로 고쳐지지 않습니다.

내 코드는 이름과 유형이 변경된 동일한 내용의 여섯 개의 사본이기 때문에 각 관련 코드 부분의 인스턴스 하나만 붙여 넣을 것입니다. 여기

<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에, 이제 여기에 해당 속성에 대한 XAML이야

public string SifraTima 
{ 
    get {return sifraTima;} 
    set 
    { 
     if(!sifraTima.Equals(value)) 
     { 
      sifraTima = value; 
      RepozitorijumWrapper.Refresh(); 
     } 
    } 
} 

: 여기

은이 호텔의 저의 발표자 클래스 :

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; 

답변

1

TextBoxText 속성에 대한 바인딩은 포커스가 손실 된 후에 만 ​​속성을 업데이트하도록 설정됩니다. 이 동작을 변경하려면, 당신과 같이 UpdateSourceTrigger의 값을 지정할 수 있습니다

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

MSDN는 속임수를 썼는지 UpdateSourceTrigger

+0

감사에 대한 자세한 정보가 있습니다. – user2352164