c# - 获取组中的选定单选按钮 (WPF)

标签 c# wpf mvvm binding radio-button

我的程序中有一个 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/

相关文章:

c# - MVVM - 验证真的需要这么麻烦吗?

c# - CommandParameter 多重绑定(bind)返回 DataGrid 控件和所选行中的自定义对象

c# - 不使用空合并运算符进行延迟初始化有什么好的理由吗?

c# - 分析和比较类似功能逻辑的工具?

wpf - Azure 媒体服务和通过 WPF 应用程序播放视频

wpf - PasswordBox 不假设样式

wpf - wpf MVVM中的多个DataContext?

c# - 无法在单元测试项目中获取类的默认构造函数

c# - 在从 C# 调用的 DLL 中使用 std::cout

WPF Popup PlacementMode.Bottom 未按预期运行