代码之家  ›  专栏  ›  技术社区  ›  Nate CSS Guy

Silverlight列表框,带有ObservaleCollection<T>和动态过滤器

  •  4
  • Nate CSS Guy  · 技术社区  · 14 年前

    假设我有一节课:

    public class MyData
    {
        public bool IsActive{get;set;}
        public String Data1 {get;set;}
        public String Data2 {get;set;}
    }
    

    ObservableCollection<MyData> data = new ObservableCollection<MyData>;
    ListBox.ItemsSource = data;
    

    IsActive 设置为“true”--我不能使用Linq查询来设置ItemsSource,因为这样它就不是ObservableCollection、IEnumerable,并且不会对listbox进行任何更新通知。

    2 回复  |  直到 14 年前
        1
  •  9
  •   John Garland    14 年前

    下面是一个稍微退化的示例(我不确定是否使用ViewModels、定位器等来解析数据和列表)

    <phone:PhoneApplicationPage.Resources>
        <CollectionViewSource x:Key="src"/>
    </phone:PhoneApplicationPage.Resources>
    

    <ListBox x:Name="MyListBox" ItemsSource="{Binding Source={StaticResource src}}">
    

    最后,在代码中,您可以将列表和集合视图源代码结合起来:

            var collectionView = this.Resources["src"] as CollectionViewSource;
            // Check for null, etc.
            collectionView.Source = observableCollectionThatIAmBindingTo;
            collectionView.View.Filter=new Predicate<Object>(o => ((ItemType)o).IsActive );
    

    此外,您还可以在以下网址查看Bea Stollnitz关于此主题的文章:

    http://bea.stollnitz.com/blog/?p=31

    http://bea.stollnitz.com/blog/?p=392

        2
  •  -1
  •   onmyway133    12 年前

    更简单的方法是使用 Visibility 在XAML中。

    假设你的 ListBox ItemTemplate 使用 StackPanel 保存你的数据,在这种情况下,你有2个 TextBlock 堆栈面板 (1代表数据1,1代表数据2)。

    能见度 活跃的