2011-07-04 12 views
5

Estoy trabajando en un proyecto pequeño que muestra respuestas para una encuesta. Tengo un problema para mostrar las respuestas a las preguntas de opciones.Grupos de RadioButton múltiples en ItemsControl

Como puede ver en el extracto de xaml a continuación, estoy intentando agrupar el botón de opción por el id de respuesta, por lo que solo se selecciona una opción por objeto de respuesta.

Sin embargo, el siguiente código trata todo el botón de opción de toda la encuesta como parte de un gran grupo de botones de opción y solo permite la selección de una opción para todas las preguntas.

Digamos, tengo 2 respuestas para mostrar (- = no seleccionado, + = seleccionado):

espero algo como esto:

Respuesta1:

-Option1 - Option2 + Option3

Respuesta2 :

-Option1 + Option2 - Option3

Pero el código xaml a continuación solo me permite tener un valor seleccionado de ambas preguntas en lugar de forzar la exclusividad mutua por pregunta.

<ItemsControl ItemsSource="{Binding Options}"> 
       <ItemsPanelTemplate> 
        <StackPanel Orientation="Horizontal" /> 
       </ItemsPanelTemplate> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <RadioButton GroupName="{Binding AnswerId}" Content="{Binding Option}" IsChecked="{Binding IsSelected, Mode=OneWay}"/> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 

Respuesta

1

creé una prueba de la utilización de su Xaml y el siguiente código y funciona bien (permite una selección de cada grupo de 3 respuestas):

enter image description here

¿Está creando todas las opciones de respuesta antes de encuadernar? Parece que GroupName no es una propiedad de dependencia.

using System.Collections.Generic; 
namespace PersonTests 
{ 
    public class QuestionTestViewModel 
    { 
     public IEnumerable<AnswerOption> Options { get; set; } 

     public QuestionTestViewModel() 
     { 
      this.Options = new List<AnswerOption>() 
          { 
           new AnswerOption(){AnswerId = 1, Option = "One A", IsSelected = false}, 
           new AnswerOption(){AnswerId = 1, Option = "One B", IsSelected = false}, 
           new AnswerOption(){AnswerId = 1, Option = "One C", IsSelected = false}, 
           new AnswerOption(){AnswerId = 2, Option = "Two A", IsSelected = false}, 
           new AnswerOption(){AnswerId = 2, Option = "Two B", IsSelected = false}, 
           new AnswerOption(){AnswerId = 2, Option = "Two C", IsSelected = false} 
          }; 
     } 
    } 

    public class AnswerOption 
    { 
     public int AnswerId { get; set; } 
     public string Option { get; set; } 
     public bool IsSelected { get; set; } 
    } 
} 
+0

Gracias HiTech, su código me ha señalado lo que estaba haciendo mal! .. Estaba usando ItemsControl como una plantilla de elemento para una fila de cuadrícula. Cada fila de la grilla está unida a un objeto de respuesta que tiene una colección de Opciones. La propiedad AnswerId es parte del objeto Answer y no del objeto AnswerOption. mi mal,.! .. pero su código me ha ayudado a ver mi error. Por cierto, marcaría tu respuesta como la respuesta correcta, pero no tengo suficiente sentido para hacerlo :). Gracias. – aamran

0

Podría tal vez publicar la definición del objeto/clase que se está conectando, que es un poco confuso en cuanto a cómo su estructura de datos está funcionando. He construido un cuestionario es Silverlight, tenía un problema similar ...

+0

Hola, por favor, consulte la publicación de HiTech Magic que es bastante similar a lo que tengo. :) – aamran

Cuestiones relacionadas