2010-12-12 38 views
9

J'ai un ItemsControl dans mon programme qui contient une liste de boutons radio.Obtenir le bouton radio sélectionné dans un groupe (WPF)

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

Comment puis-je trouver le bouton radio sélectionné dans le groupe Insertions de manière MVVM?

La plupart des exemples que j'ai trouvés sur Internet impliquent la définition de propriétés booléennes individuelles que vous associez à la propriété IsChecked à l'aide d'un convertisseur.

Existe-t-il un équivalent du ListBoxSelectedItem auquel je peux me lier?

Répondre

9

Une solution qui vient à l'esprit est d'ajouter une propriété booléenne IsChecked à vos entités d'insertion et de lier cela à la propriété `IsChecked 'du bouton Radio. De cette façon, vous pouvez cocher le bouton radio 'Vérifié' dans Afficher le modèle.

Voici un exemple rapide et sale.

NB: Je ignoré le fait que le IsChecked peut aussi être null, vous pouvez gérer que l'utilisation bool? si nécessaire.

Le ViewModel simple,

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

Le XAML - Le code n'apparaît derrière, car il n'a pas de code autre que que le code généré.

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