Czasami zdarza się iż potrzeba zbindować wartości typu wyliczeniowego do pola a następnie wykonać jakieś działanie.
Bindowanie i w takiej sytuacji nie zawodzi i możemy w prosty sposób zbindować wartość enuma i przesłać ją jako parametr komendy.
Zobaczmy na przykład:
Mamy program w którym mamy typ wyliczeniowy grupa, zawierający dwa elementy: pracownicy i studenci. Grupa będzie wybierana poprzez RadioButton a po wybraniu któregoś z nich dokonujemy obliczeń. Tak więc użyjemy komendy a w niej wyślemy odpowiedni parametr.
W XAML-u sprawa przedstawia się następująco:
Code:
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication2"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel Orientation="Vertical">
<TextBlock Text="Wybierz grupę do której należysz" />
<RadioButton
Content="Studenci"
GroupName="Group"
Command="{Binding SelectGroupCommand}"
CommandParameter="{x:Static local:Group.Students}" />
<RadioButton
Content="Pracownicy"
GroupName="Group"
Command="{Binding SelectGroupCommand}"
CommandParameter="{x:Static local:Group.Workers}" />
</StackPanel>
</Grid>
</Window>
W kodzie odbierzemy "kliknięcie" w następujący sposób:
Code:
using System;
using System.ComponentModel;
using Microsoft.Practices.Prism.Commands;
namespace WpfApplication2
{
public class MainWindowViewModel : INotifyPropertyChanged
{
public DelegateCommand<object> SelectGroupCommand
{
get { return _selectGroupCommand; }
}
private DelegateCommand<object> _selectGroupCommand;
private void SelectGroup(object group)
{
if (group != null)
{
if (group is Group)
{
var selectedGroup = (Group)group;
}
else
{
throw new ArgumentException("Argument is not Group object");
}
}
else
{
throw new ArgumentNullException("group is null");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}
Brak komentarzy:
Prześlij komentarz