Mega Code Archive

 
Categories / C# / WPF
 

Wrap collection based resource in a CollectionViewSource

<Window x:Class="WpfApplication1.Window1"     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     xmlns:local="clr-namespace:WpfApplication1"     Title="WPF" Height="124" Width="124">     <Window.Resources>         <local:Countries x:Key="countries"/>         <CollectionViewSource x:Key="cvs" Source="{Binding Source={StaticResource countries}}"             Filter="CollectionViewSource_EuropeFilter" />     </Window.Resources>     <Grid>         <ItemsControl ItemsSource="{Binding Source={StaticResource cvs}}"             DisplayMemberPath="Name"/>     </Grid> </Window> //File:Window.xaml.cs using System.Windows; using System.Windows.Data; using System.Collections.ObjectModel; namespace WpfApplication1 {     public partial class Window1 : Window     {         public Window1()         {             InitializeComponent();         }         private void CollectionViewSource_EuropeFilter(object sender, FilterEventArgs e)         {             Country country = e.Item as Country;             e.Accepted = (country.Continent == Continent.Europe);         }     }     public class Country     {         private string name;         private Continent continent;         public string Name         {             get{ return name;}             set{name = value;}         }         public Continent Continent         {             get{return continent;}             set{continent = value;}         }         public Country(string name, Continent continent)         {             this.name = name;             this.continent = continent;         }     }     public enum Continent     {         Europe,         NorthAmerica,     }     public class Countries : Collection<Country>     {         public Countries()         {             this.Add(new Country("Great Britan", Continent.Europe));             this.Add(new Country("USA", Continent.NorthAmerica));             this.Add(new Country("Canada", Continent.NorthAmerica));         }     } }