2010-12-12 17 views
9

Ho un ItemsControl nel mio programma che contiene un elenco di pulsanti di opzione.Ottiene il pulsante di opzione selezionato in un gruppo (WPF)

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

Come faccio a trovare il pulsante di scelta selezionato nel gruppo Insertions in maniera MVVM?

La maggior parte degli esempi che ho trovato su Internet riguardano l'impostazione di singole proprietà booleane che si associano alla proprietà IsChecked con l'aiuto di un convertitore.

Esiste un equivalente dello ListBoxSelectedItem a cui è possibile collegarsi?

risposta

9

Una soluzione che viene in mente è aggiungere una proprietà booleana IsChecked alle proprie entità Insertion e collegarla alla proprietà `IsChecked 'del pulsante Radio. In questo modo è possibile selezionare il pulsante di opzione "Controllato" in Visualizza modello.

Ecco un esempio rapido e sporco.

NB: ho ignorato il fatto che l'IsChecked può anche essere null, si potrebbe gestire che l'utilizzo di bool? se necessario.

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

Il XAML - Il codice dietro non è mostrata in quanto priva di codice diverso rispetto al codice generato.

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