我的程序中有一个 ItemsControl
,它包含一个单选按钮列表。
<ItemsControl ItemsSource="{Binding Insertions}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<RadioButton GroupName="Insertions"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
如何以 MVVM 方式在 group Insertions
中找到选中的单选按钮?
我在 Internet 上找到的大多数示例都涉及设置您在转换器的帮助下将 IsChecked
属性绑定(bind)到的单个 bool 属性。
是否有我可以绑定(bind)到的 ListBox
SelectedItem
的等效项?
最佳答案
想到的一个解决方案是将 IsChecked
bool 属性添加到您的插入实体,并将其绑定(bind)到单选按钮的“IsChecked”属性。这样您就可以在 View Model 中选中“Checked”单选按钮。
这是一个快速而肮脏的例子。
注意:我忽略了 IsChecked 也可以是 null
的事实,如果需要,您可以使用 bool?
来处理它。
简单的 View 模型
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; }
}
}
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>
关于c# - 获取组中的选定单选按钮 (WPF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4420911/