Mega Code Archive

 
Categories / C# / WPF
 

Bind the Button to a Command

<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="240" Width="300">     <StackPanel>         <TextBlock Text="First Name"/>         <TextBox   Text="{Binding Path=FirstName}"/>         <TextBlock Text="Age"/>         <TextBox Text="{Binding Path=Age}"/>                  <Button Command="{Binding Path=Add}" Content="Add"/>         <ComboBox x:Name="cboOccupation" IsEditable="False" Width="100">              <ComboBoxItem>Student</ComboBoxItem>              <ComboBoxItem>Skilled</ComboBoxItem>              <ComboBoxItem>Professional</ComboBoxItem>         </ComboBox>         <Button Command="{Binding Path=SetOccupation}" CommandParameter="{Binding ElementName=cboOccupation, Path=Text}" Content="Set Occupation"/>         <TextBlock Text="Status"/>         <TextBlock Text="{Binding Path=Status, UpdateSourceTrigger=PropertyChanged}"/>              </StackPanel> </Window> //File:Window.xaml.cs using System.Windows; using System; using System.ComponentModel; using System.Windows.Input; namespace WpfApplication1 {     public partial class Window1 : Window     {         public Window1()         {             InitializeComponent();             this.DataContext = new Employee(){FirstName = "A"};         }     }     public class Employee : INotifyPropertyChanged     {         private string firstName;         private int age;         private string occupation;         private string status;         private AddEmployeeCommand addEmployeeCommand;         private SetOccupationCommand setOccupationCommand;         public string Status         {             get             {                 return status;             }             set             {                 if(status!= value)                 {                     status= value;                     OnPropertyChanged("Status");                 }             }         }         public string FirstName         {             get             {                 return firstName;             }             set             {                 if(firstName != value)                 {                     firstName = value;                     OnPropertyChanged("FirstName");                 }             }         }         public int Age         {             get             {                 return age;             }             set             {                 if(this.age != value)                 {                     this.age = value;                     OnPropertyChanged("Age");                 }             }         }         public string Occupation         {             get             {                 return occupation;             }             set             {                 if(this.occupation != value)                 {                     this.occupation = value;                     OnPropertyChanged("Occupation");                 }             }         }         public AddEmployeeCommand Add         {             get             {                 if(addEmployeeCommand == null)                     addEmployeeCommand = new AddEmployeeCommand(this);                 return addEmployeeCommand;             }         }         public SetOccupationCommand SetOccupation         {             get             {                 if(setOccupationCommand == null)                     setOccupationCommand = new SetOccupationCommand(this);                 return setOccupationCommand;             }         }         public event PropertyChangedEventHandler PropertyChanged;         private void OnPropertyChanged(string propertyName)         {             if(this.PropertyChanged != null)             {                 this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));             }         }     }     public class AddEmployeeCommand : ICommand     {         private Employee person;         public AddEmployeeCommand(Employee person)         {             this.person = person;             this.person.PropertyChanged += new PropertyChangedEventHandler(person_PropertyChanged);         }         private void person_PropertyChanged(object sender, PropertyChangedEventArgs e)         {             if(CanExecuteChanged != null)             {                 CanExecuteChanged(this, EventArgs.Empty);             }         }         public bool CanExecute(object parameter)         {             if(!string.IsNullOrEmpty(person.FirstName))                if(person.Age > 0)                     if(string.IsNullOrEmpty(person.Status))                             return true;             return false;         }         public event EventHandler CanExecuteChanged;         public void Execute(object parameter)         {             person.Status = string.Format("Added {0}", person.FirstName);         }     }     public class SetOccupationCommand : ICommand     {         private Employee person;         public SetOccupationCommand(Employee person)         {             this.person = person;             this.person.PropertyChanged += new PropertyChangedEventHandler(person_PropertyChanged);         }         private void person_PropertyChanged(object sender, PropertyChangedEventArgs e)         {             if(CanExecuteChanged != null)             {                 CanExecuteChanged(this, EventArgs.Empty);             }         }         public bool CanExecute(object parameter)         {             if(!string.IsNullOrEmpty(parameter as string))                 if(!string.IsNullOrEmpty(person.Status))                     return true;             return false;         }         public event EventHandler CanExecuteChanged;         public void Execute(object parameter)         {             person.Occupation = parameter.ToString();             person.Status = string.Format("Added {0},{1}", person.FirstName, person.Occupation);         }     } }