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);
}
}
}
Related examples in the same category