Предлагаю Вашему вниманию пример того, как можно, используя шаблон проектирования 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();
}
Результат можно увидеть на рисунке:

MVVMRadioButton.rar (45,0 KiB, 1 455 закачек)
Похожие статьи
Спасибо, помогло.