2012-05-02 30 views
1

我有一個datagrid包含3個DataGridTemplateColumns持有radioButtons。 現在我想控制的單選按鈕,從按鈕的點擊事件「的IsEnabled」屬性在我後面的代碼:控制RadioButton DataGridTemplateColumn從代碼

<DataGrid AutoGenerateColumns="False" Height="300" x:Name="dgEmps" 
       RowEditEnding="gridEmps_RowEditEnding" CellEditEnding="gridEmps_CellEditEnding" 
       FlowDirection="RightToLeft" 
       SelectionChanged="gridEmps_SelectionChanged"> 
     <DataGrid.Columns> 

      <DataGridTemplateColumn Header="Shift Manager"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <RadioButton GroupName="{Binding EmployeeId}" 
            IsChecked="{Binding IsManager, Mode=TwoWay}" x:Name="dgrIsManager"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
      <DataGridTemplateColumn Header="Waiter" IsReadOnly="True"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <RadioButton GroupName="{Binding EmployeeId}" 
            IsChecked="{Binding IsWaiter, Mode=TwoWay}" x:Name="dgrIsWaiter"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
      <DataGridTemplateColumn Header="Cook" IsReadOnly="True" x:Name="aaa"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <RadioButton GroupName="{Binding EmployeeId}" 
            IsChecked="{Binding IsCook, Mode=TwoWay}" x:Name="dgrIsCook"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

的事情是,「IsReadOnly」屬性不工作,我可以」 t似乎從我的代碼訪問radioButton屬性(甚至沒有通過xaml聲明的x:name)。 我試過這個: WPF Toolkit DataGrid SelectionChanged Getting Cell Value 和許多其他教程/博客文章,但無法使其工作。 有什麼想法?

回答

1

您無法通過X訪問單選按鈕:名稱,因爲它是在一個DataTemplate定義,而不是在一個主要內容樹。

而是這樣定義DataTemplateColumns(根據你的最後一列):

<DataGridTemplateColumn Header="Cook" IsReadOnly="True" x:Name="aaa"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <RadioButton GroupName="{Binding EmployeeId}" 
         IsChecked="{Binding IsCook, Mode=TwoWay}" x:Name="dgrIsCook" 
         IsEnabled={Binding IsReadOnly, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridCell}}, Converter={StaticResource BooleanOppositeConverter}}/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

然後再從後面的代碼aaa.IsReadOnly設置爲true或false。此更改應傳播給屬於此DataGridColumn的每個DataGridCell,然後由於綁定而更改RadioButton.IsEnabled。

XAML片段使用BooleanOppositeConverter,它只是一個轉換布爾值的轉換器。

0

爲了確保您readiobutton是隻讀的,是設置IsHitTestVisible

<DataGridTemplateColumn ...> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <RadioButton ....IsHitTestVisible="False"/>    
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn>