привязка фильтра CollectionViewSource к ListBox

Я новичок в XAML и C#. У меня есть приведенный ниже код, и я не могу понять, что нужно изменить, чтобы устранить эти две ошибки.

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 и привязке.

Моя интуиция подсказывает, что это распространенная проблема, но после двух часов тестирования я вошел в петлю блокировки мозга и больше не могу «видеть» ее ясно. Поэтому прошу помощи. Благодарю вас!


person acadea    schedule 21.07.2013    source источник


Ответы (1)


эй, @acadea, сначала вы должны понять основы. Например, как на самом деле работают свойства и определить вашу ошибку. не определяя свойство Cautare, но вы определяете его набор. так что определите Каутаре так..

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

Вторая ошибка связана с тем, что в вашем коде не было изменено свойство, но вы используете его в своем текстовом блоке. Проблема здесь в том, что вам также нужно изучить основы привязки данных. .

person loop    schedule 22.07.2013
comment
Спасибо за ваш ответ. на самом деле, я поддержал аксесор, это решено, я узнал позже. но я не могу понять, как связать, используя измененное свойство. Мне удалось использовать явный триггер или подписку на события. - person acadea; 23.07.2013
comment
Со всеми бывает :D - person loop; 06.01.2014