2013-07-21 4 views
0

저는 XAML 및 C#의 초보자입니다. 아래 코드를 가지고 있는데이 두 가지 오류를 해결하기 위해 무엇을 수정해야하는지 알 수 없습니다.바인딩 CollectionViewSource ListBox를 사용하여 필터

Requested value 'PropertyChanged' was not found. 

하고 여기에

'Cautare.get' must declare a body because it is not marked abstract, extern, or partial 

는 XAML

<TextBox x:Name="textbutton1" Text="{Binding Cautare, UpdateSourceTrigger=PropertyChanged}"/> 
<ListBox Grid.Row="1" x:Name="ListBox" Margin="0,0,-12,0" ItemsSource="{Binding Sursa.View}"> 

및 코드 숨김

public partial class MainPage : PhoneApplicationPage 
    { 
     public CollectionViewSource Sursa { get; set; } 
     public string Cautare { get; 
       set 
       { 
        if (!string.IsNullOrEmpty(Cautare)) 
        Filtreaza(); 
        Sursa.View.Refresh(); 
       } 
     } 
     private void Filtreaza() 
     { 
      Sursa.Filter -= new FilterEventHandler(Filtru); 
      Sursa.Filter += new FilterEventHandler(Filtru); 
     } 
     private void Filtru(object sender, FilterEventArgs e) 
     { 
      var src = e.Item as Rind; 
      if (src == null) e.Accepted = false; 
      else if (src.Text != null && !src.Text.Contains(Cautare)) e.Accepted = false; 
     } 
     public ObservableCollection<Rind> Lista { get; set; } 

     public MainPage() 
     { 
      Lista = new ObservableCollection<Rind> 
         { 
          new Rind { Text = "abcd"}, 
          new Rind { Text = "asdf"}, 
          new Rind { Text = "asdzx"}, 
          new Rind { Text = "adffgd"}, 
          new Rind { Text = "asdfgea"}, 
         }; 
      InitializeComponent(); 
      Sursa = new CollectionViewSource(); 
      Sursa.Source = Lista; 
      DataContext = this; 
     } 
     public class Rind 
     { 
      public string Text { get; set; } 
     } 
    } 

이다 나는했습니다 이미 CollectionViewSource 및 대한 다른 유사한 질문을 읽어 제본.

내 직관은 이것이 일반적인 문제라고 말하지만 2 시간의 테스트 후에 뇌 차단 루프에 들어갔고 더 이상 명확하게 볼 수 없습니다. 그래서 나는 도움을 청하고있다. 감사합니다.

답변

0

헤이 @acadea 먼저 .like 기초를 이해이 속성은 정말 일을하고 오류 정의 "는 추상적으로 표시되지 않기 때문에, 몸을 선언해야 Cautare.get을 '통근 또는 부분" 때문에하지의 방법 Cautare 속성을 정의하지만 그 집합을 정의하고 있습니다. 그렇게

public string Cautare { get{ return SomeStringHere ;} 
      set 
      { // you can set some value here 
       if (!string.IsNullOrEmpty(Cautare)) 
       Filtreaza(); 
       Sursa.View.Refresh(); 
      } 
    } 

초 오류 코드에서하여 PropertyChanged의하지 implentation 때문이다 .. 이런 식으로 Cautare를 정의하지만 당신은 여기 textbloack..the 문제에서 그것을 사용하는 당신은 또한 데이터 바인딩의 기초에 대해 공부해야한다 .. 시작하는 길을 열망하길 바랍니다 ..

+0

답장을 보내 주셔서 감사합니다. 사실, 나는 accesor를 뒷받침했다. 그것은 해결되었다. 나는 나중에 발견했다. 하지만 "속성 변경"을 사용하여 바인딩하는 방법을 이해할 수 없습니다. 나는 "명시 적"으로 트리거하거나 이벤트에 가입하려고 시도했습니다. – acadea

+0

6 개월 후에 내 질문을 읽고 :)) – acadea

+0

그것은 모두와 함께 발생 : D 조 – loop