使用ListBox绑定CollectionViewSource Filter

时间:2013-07-21 11:10:47

标签: xaml binding filter windows-phone collectionviewsource

我是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和绑定的其他类似问题。

我的直觉说这是一个常见的问题,但经过两个小时的测试后我进入了脑阻塞循环,不能再“清楚地”看到它。所以我在寻求帮助。 谢谢!

1 个答案:

答案 0 :(得分:0)

嘿@acadea首先你已经理解了基础知识。比如属性如何真正起作用并定义了你的错误“Cautare.get”必须声明一个正文,因为它没有标记为抽象,外部或部分“是因为没有定义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,但你在textbloack中使用它...这里的问题是你还必须研究数据绑定基础知识。 希望它能给你一个开始..问题的方法..