2011-03-24 8 views
11

Tengo objetos vinculados a un DataGrid. Creé una columna de botón de opción vinculada a la propiedad Es predeterminado del objeto.DataGrid que crea la columna RadioButton

Cuando se inicia la aplicación, se muestra el elemento correcto como predeterminado, sin embargo, el enlace nunca se actualiza. El comportamiento que me gustaría es que el usuario verifique una casilla de radio y que ese objeto se convierta en el predeterminado.

 <DataGrid CanUserAddRows="False" AutoGenerateColumns="False" Name="TEst" > 
     <DataGrid.Columns > 
      <DataGridTextColumn Header="Value" Binding="{Binding Path=Name, Mode=OneTime}"/> 

      <DataGridTemplateColumn Header="Is Default"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <RadioButton GroupName="Test" IsChecked="{Binding IsDefault}" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

     </DataGrid.Columns> 
    </DataGrid> 

private class Test : INotifyPropertyChanged 
    { 
     public string Name 
     { 
      get; 
      set; 
     } 
     bool isDefult; 
     public bool IsDefault 
     { 
      get 
      { 
       return isDefult; 
      } 
      set 
      { 
       isDefult = value; 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 
    } 

    public MainWindow() 
    { 
     this.InitializeComponent(); 
     Test[] ya = new Test[] { new Test { Name = "1", IsDefault = false }, new Test { Name = "2", IsDefault = false }, new Test { Name = "3", IsDefault = true } }; 

     this.TEst.ItemsSource = ya; 
    } 

He estado tirando de mi cabello toda la tarde en esto. Cualquier ayuda sería amada.

Respuesta

12

Es bastante extraño, pero todo lo que tiene que hacer es cambiar la unión de RadioButton:

<RadioButton GroupName="Test" IsChecked="{Binding IsDefault, UpdateSourceTrigger=PropertyChanged}" /> 

Por lo que yo sé, el valor por defecto es LostFocus, pero hay algunos problemas con el enfoque dentro de DataGrid. No sé por qué sucede el problema.

Y otro problema: plantee el evento PropertyChanged dentro del setter de la propiedad IsDefault. Ahora todo funciona bien sin notificaciones, pero si agrega más código xaml será difícil averiguar por qué no se actualiza la interfaz de usuario.

+0

gracias por salvarme de muchos golpes en el escritorio. – StrayPointer

1

Configuración UpdateSourceTrigger=PropertyChanged no es suficiente aquí. También necesita Mode=TwoWay

Cuestiones relacionadas