Mega Code Archive

 
Categories / C# / WPF
 

Bind to a Collection with the Master-Detail Pattern

<Window x:Class="WpfApplication1.Window1"     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     Title="WPF" Height="370" Width="280">     <Window.Resources>         <DataTemplate              x:Key="masterTemplate">             <TextBlock Margin="4" Text="{Binding Path=Description, UpdateSourceTrigger=PropertyChanged}"/>         </DataTemplate>         <DataTemplate x:Key="detailTemplate">             <StackPanel>                <TextBlock Text="First Name"/>                <TextBox Text="{Binding Path=FirstName, Mode=TwoWay}"/>                <TextBlock Text="Age"/>                <TextBox Text="{Binding Path=Age, Mode=TwoWay}"/>                <TextBlock Text="Occupation"/>                <ComboBox x:Name="cboOccupation" IsEditable="False" Text="{Binding Path=Occupation, Mode=TwoWay}">              <ComboBoxItem>Student</ComboBoxItem>              <ComboBoxItem>Engineer</ComboBoxItem>              <ComboBoxItem>Professional</ComboBoxItem>         </ComboBox>       </StackPanel>         </DataTemplate>     </Window.Resources>     <StackPanel Margin="5">         <ListBox ItemsSource="{Binding}" ItemTemplate="{StaticResource masterTemplate}" IsSynchronizedWithCurrentItem="True" />         <ContentControl            Content="{Binding}"           ContentTemplate="{StaticResource detailTemplate}" />                 <Button Click="AddButton_Click">Add Employee</Button>     </StackPanel> </Window> //File:Window.xaml.cs using System.Windows; using System.ComponentModel; using System; using System.Collections.Generic; using System.Text; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using System.Collections.ObjectModel; namespace WpfApplication1 {     public partial class Window1 : Window     {         EmployeeCollection people = new EmployeeCollection();         public Window1()         {             InitializeComponent();             this.DataContext = people;         }         private void AddButton_Click(object sender, RoutedEventArgs e)         {             people.Add(new Employee(){FirstName = "A",Age = 26});         }     }     public class Employee : INotifyPropertyChanged     {         private string firstName;         private int age;         public string FirstName         {             get             {                 return firstName;             }             set             {                 if(firstName != value)                 {                     firstName = value;                     OnPropertyChanged("FirstName");                     OnPropertyChanged("Description");                 }             }         }         public int Age         {             get             {                 return age;             }             set             {                 if(this.age != value)                 {                     this.age = value;                     OnPropertyChanged("Age");                     OnPropertyChanged("Description");                 }             }         }                  public string Description         {             get             {                 return string.Format("{0})", firstName);             }         }         public override string ToString()         {             return Description;         }         public event PropertyChangedEventHandler PropertyChanged;         private void OnPropertyChanged(string propertyName)         {             if(this.PropertyChanged != null)             {                 this.PropertyChanged(this,new PropertyChangedEventArgs(propertyName));             }         }     }     public class EmployeeCollection:ObservableCollection<Employee>     {         public EmployeeCollection()         {             Add(new Employee(){FirstName = "A",Age = 26,});             Add(new Employee(){FirstName = "C",Age = 28,});             Add(new Employee(){FirstName = "E",Age = 37,});             Add(new Employee(){FirstName = "Q",Age = 25,});         }     } }