2011-03-24 50 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