[英]Get Selected Radio Button in a Group (WPF)
I have a ItemsControl
in my program that contains a list of radio buttons. 我的程序中有一个
ItemsControl
,其中包含一个单选按钮列表。
<ItemsControl ItemsSource="{Binding Insertions}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<RadioButton GroupName="Insertions"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
How do I find the selected radio button in the group Insertions
in a MVVM manner? 如何以MVVM方式在“
Insertions
” 组中找到所选单选按钮?
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. 我在互联网上找到的大多数例子都涉及在转换器的帮助下设置绑定
IsChecked
属性的各个布尔属性。
Is there an equivalent of the ListBox
SelectedItem
that I can bind to? 是否有我可以绑定的
ListBox
SelectedItem
的等价物?
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. 想到的一个解决方案是向Insertion实体添加一个
IsChecked
布尔属性,并将其绑定到Radio按钮的`IsChecked'属性。 This way you can check the 'Checked' radio button in View Model. 这样,您可以在View Model中查看“Checked”单选按钮。
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?
注意:我忽略了IsChecked也可以为
null
的事实,你可以使用bool?
处理它bool?
if required. 如果需要。
The simple ViewModel 简单的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. XAML - 后面的代码没有显示,因为它没有生成代码以外的代码。
<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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.