2011-03-24 2 views
11

DataGrid에 바인딩 된 개체가 있습니다. 개체의 Is Default 속성에 바인딩 된 라디오 단추 열을 만들었습니다.RadioButton 열을 만드는 DataGrid

앱이 시작되면 올바른 항목이 기본값으로 표시되지만 바인딩은 업데이트되지 않습니다. 내가 원하는 동작은 사용자가 라디오 박스를 체크하고 그 객체가 디폴트가되도록하는 것이다.

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

나는 오후 내내 내 머리카락을 꺼내 ​​왔습니다. 어떤 도움이라도 사랑 받게 될 것입니다.

답변

12

그것은 아주 이상한,하지만 당신이해야 할 모든이 설명서의 RadioButton의 바인딩을 변경하는 것입니다 :

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

지금까지 내가 아는 한, 기본값은 LostFocus이지만, 초점을 몇 가지 문제가있다 DataGrid 내부. 나는 왜 문제가 발생하는지 모른다.

다른 문제 : IsDefault 속성의 설정자 안에 PropertyChanged 이벤트를 발생시킵니다. 이제 모든 것이 정상적으로 작동하지만 알림이 없으면 더 많은 xaml 코드를 추가하면 UI가 업데이트되지 않는 이유를 찾는 것이 어려워집니다.

+0

책상 위에 내 머리를 두드리는 것에서 나를 구 해주셔서 감사합니다. – StrayPointer

1

설정 UpdateSourceTrigger=PropertyChanged은 충분하지 않습니다. 너도 필요해. Mode=TwoWay

관련 문제