Get Selected Radio Button in a Group (WPF)
I have a ItemsControl
in my program that contains a list of radio buttons.
<ItemsControl ItemsSource="{Binding Insertions}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<RadioButton GroupName="Insertions"/>
</Grid>
</D开发者_如何学运维ataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
How do I find the selected radio button in the group Insertions
in a MVVM manner?
Most of the examples I have found on the internet involve setting individual boolean properties that you bind the IsChecked
property to with the help of a converter.
Is there an equivalent of the ListBox
SelectedItem
that I can bind to?
One solution that comes to mind is to add an IsChecked
boolean property to your Insertion entities and bind that to the `IsChecked' property of the Radio button. This way you can check the 'Checked' radio button in View Model.
Here is a quick and dirty example.
NB: I ignored the fact that the IsChecked can also be null
, you could handle that using bool?
if required.
The simple ViewModel
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
namespace WpfRadioButtonListControlTest
{
class MainViewModel
{
public ObservableCollection<Insertion> Insertions { get; set; }
public MainViewModel()
{
Insertions = new ObservableCollection<Insertion>();
Insertions.Add(new Insertion() { Text = "Item 1" });
Insertions.Add(new Insertion() { Text = "Item 2", IsChecked=true });
Insertions.Add(new Insertion() { Text = "Item 3" });
Insertions.Add(new Insertion() { Text = "Item 4" });
}
}
class Insertion
{
public string Text { get; set; }
public bool IsChecked { get; set; }
}
}
The XAML - The code behind is not shown since it has no code other than than the generated code.
<Window x:Class="WpfRadioButtonListControlTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfRadioButtonListControlTest"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:MainViewModel x:Key="ViewModel" />
</Window.Resources>
<Grid DataContext="{StaticResource ViewModel}">
<ItemsControl ItemsSource="{Binding Insertions}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<RadioButton GroupName="Insertions"
Content="{Binding Text}"
IsChecked="{Binding IsChecked, Mode=TwoWay}"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</Window>
精彩评论