2010-09-20 15 views
7

He atado el DataContext de la siguiente ventana para el código detrás de darme un MVVM style para demostrar este comportamiento:Botones de radio WPF - ¿MVVM - el enlace parece morir?

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300" 
     DataContext="{Binding RelativeSource={RelativeSource Self}}"> 
    <StackPanel> 
     <RadioButton GroupName="test" Content="Monkey" IsChecked="{Binding IsMonkey}"/> 
     <RadioButton GroupName="test" Content="Turtle" IsChecked="{Binding IsTurtle}" /> 
    </StackPanel> 
</Window> 

Heres el código subyacente:

public partial class Window1 
{ 
    public Window1() 
    { 
     InitializeComponent(); 
    } 

    private bool _isMonkey; 
    public bool IsMonkey 
    { 
     get { return _isMonkey; } 
     set 
     { 
      _isMonkey = value; 
     } 
    } 

    private bool _isTurtle; 
    public bool IsTurtle 
    { 
     get { return _isTurtle; } 
     set 
     { 
      _isTurtle = value; 
     } 
    } 
} 

Poner un punto de interrupción en el conjunto de IsMonkey y IsTurtle y luego ejecutar la aplicación y seleccionar IsMonkey y IsTurtle uno tras otro, encontré que funciona para la primera selección de cada control, en la segunda selección el enlace b reaks y los puntos de interrupción ya no se activan?

¿Alguien puede indicarme la dirección correcta, por favor?

Respuesta

10

Su ejemplo no ha cambiado la notificación. Tu escribiste que es solo un ejemplo para una construcción estilo MVVM. Por lo tanto, supongo que ha implementado INotifyPropertyChanged o las propiedades son DependencyProperties. Si no, lo primero que debe hacer es cambiar la notificación.

Si tiene una notificación de cambio, le da a RadioButtons diferentes nombres de grupo (otro nombre para cada instancia). Esto los desacopla y la unión ya no se romperá.

<StackPanel> 
    <RadioButton GroupName="test1" Content="Monkey" IsChecked="{Binding IsMonkey}"/> 
    <RadioButton GroupName="test2" Content="Turtle" IsChecked="{Binding IsTurtle}" /> 
</StackPanel> 

Dependiendo de la declaración de sus propiedades, sino que también puede ser meaningfull para declarar la TwoWay encuadernación.

IsChecked="{Binding IsMonkey,Mode=TwoWay} 

Hope this help.

+0

Hola, gracias: lo conseguí trabajando a través de diferentes nombres de grupos como sugeriste y algunos códigos en las propiedades. Es molesto, ya que es el mismo grupo, así que quería usar esa funcionalidad, pero no me lo permite. –

+0

'darle a RadioButtons diferentes nombres de grupo' Dios mío, me salvaste el trasero. – user1112008

2

Este es un problema conocido con los botones de radio de WPF; comprobar estos mensajes para más detalles y soluciones -

WPF RadioButtons y enlace de datos: http://geekswithblogs.net/claraoscura/archive/2008/10/17/125901.aspx

botón Parsimonia WPF Radio vinculante (enumeraciones y corrección de errores): http://inquisitorjax.blogspot.com/2009/02/wpf-radio-button-binding-enums-and-bug.html

RadioButton tema fijaciones sin marcar, aún no se resuelve? http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/8eb8280a-19c4-4502-8260-f74633a9e2f2/

+0

Gracias por la información. –

0

Este problema se ha solucionado en WPF 4.0, estoy aprovechando este comportamiento en mi propio proyecto en este momento. Simplemente coloque los botones de opción en el mismo grupo, ya no es necesario usar nombres de grupo diferentes. Los enlaces no se romperán ... de hecho, el botón de opción "des-seleccionado" tendrá su valor límite establecido en falso como se esperaba.

Cuestiones relacionadas