2010-12-12 9 views
9

Tengo un ItemsControl en mi programa que contiene una lista de botones de opción.Obtener el botón de selección de radio en un grupo (WPF)

<ItemsControl ItemsSource="{Binding Insertions}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Grid> 
        <RadioButton GroupName="Insertions"/> 
       </Grid> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 

¿Cómo encuentro el botón de opción seleccionado en el grupo Insertions de manera MVVM?

La mayoría de los ejemplos que he encontrado en Internet implican el establecimiento de propiedades booleanas individuales a las que se vincula la propiedad IsChecked con la ayuda de un convertidor.

¿Hay un equivalente al ListBoxSelectedItem al que puedo vincular?

Respuesta

9

Una solución que viene a la mente es agregar una propiedad booleana IsChecked a sus entidades de Inserción y vincularla a la propiedad `IsChecked 'del botón de Radio. De esta forma, puede verificar el botón de opción "Controlado" en Ver modelo.

Aquí hay un ejemplo rápido y sucio.

NB: Ignoré el hecho de que el IsChecked también puede ser null, se podía manejar que el uso de bool? si es necesario.

El simple modelo de vista

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; } 
    } 
} 

El XAML - El código subyacente no se muestra ya que no tiene código diferente que el código generado.

<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> 
Cuestiones relacionadas