2011-03-24 47 views
11

我有绑定到DataGrid的对象。我创建了一个绑定到该对象的Is Default属性的单选按钮列。DataGrid创建RadioButton列

当应用程序启动时,正确的项目显示为默认项目,但绑定从未更新。我想要的行为是让用户检查一个收音机盒并将该对象设为默认值。

 <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 GroupName="Test" IsChecked="{Binding IsDefault, UpdateSourceTrigger=PropertyChanged}" /> 

据我所知,默认值是引发LostFocus,但也有一些问题焦点在DataGrid中。我不知道为什么会发生问题。

而另一个问题:提升IsDefault属性的设置者中的PropertyChanged事件。现在一切工作正常,没有通知,但如果你添加更多的xaml代码,将很难找出为什么UI不更新。

+0

感谢您为我解除了很多头撞在桌面上的麻烦。 – StrayPointer 2013-04-12 20:35:13

1

设置UpdateSourceTrigger=PropertyChanged在这里是不够的。您还需要Mode=TwoWay