Предлагаю Вашему вниманию пример того, как можно, используя шаблон проектирования Model View ViewModel, работать с такими контролами как RadioButton. Я пересмотрел немного примеров и этот мне понравился больше всего.
Итак, допустим, у нас есть форма, на которой есть 3 радио кнопки:
Вот XAML этой формы:
<Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <GroupBox Header="Приоритет" Margin="15" Grid.Row="0"> <StackPanel> <RadioButton Content="Низкий" IsChecked="{Binding IsLowPriority}" Margin="3"/> <RadioButton Content="Средний" IsChecked="{Binding IsMiddlePriority}" Margin="3"/> <RadioButton Content="Высокий" IsChecked="{Binding IsHighPriority}" Margin="3"/> </StackPanel> </GroupBox> <StackPanel Grid.Row="1" Orientation="Horizontal" > <TextBlock Text="Вы выбрали:" Margin="5" FontWeight="Bold" FontSize="14"/> <TextBlock Text="{Binding GetResult}" Margin="5" FontWeight="Bold" FontSize="14"/> </StackPanel> </Grid>
Теперь перейдем к написанию нашего ViewModel. Для значений кнопок используем перечисление Priority:
enum Priority { Low, Middle, High } public class ViewModel : ViewModelBase { Priority priority = Priority.High; public Priority Priority { get { return priority; } set { if (priority == value) return; priority = value; OnPropertyChanged("Priority"); OnPropertyChanged("IsLowPriority"); OnPropertyChanged("IsMiddlePriority"); OnPropertyChanged("IsHighPriority"); OnPropertyChanged("GetResult"); } } public bool IsLowPriority { get { return Priority == Priority.Low; } set { Priority = value ? Priority.Low : Priority; } } public bool IsMiddlePriority { get { return Priority == Priority.Middle; } set { Priority = value ? Priority.Middle : Priority; } } public bool IsHighPriority { get { return Priority == Priority.High; } set { Priority = value ? Priority.High : Priority; } } }
Я добавил еще одно свойство GetResult которое выступает как бы конвертером значений на русский язык. К нему я привязал TextBlock который показывает какой элемент выбран:
public string GetResult { get { switch (Priority) { case Priority.Low: return "Низкий"; case Priority.Middle: return "Средний"; case Priority.High: return "Высокий"; } return ""; } }
Нам осталось запустить наше приложение. Для этого, переопределим метод OnStartup(StartupEventArgs e) в App.xaml.cs:
protected override void OnStartup(StartupEventArgs e) { ViewModel view = new ViewModel(); MainWindow win = new MainWindow(); win.DataContext = view; win.ShowDialog(); }
Результат можно увидеть на рисунке:
[download id=”17″]
Спасибо, помогло.