Get Selected Radio Button in a Group (WPF)

前端 未结 1 1498
清歌不尽
清歌不尽 2021-02-14 22:56

I have a ItemsControl in my program that contains a list of radio buttons.


        

        
相关标签:
1条回答
  • 2021-02-14 23:06

    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>
    
    0 讨论(0)
提交回复
热议问题