2012-05-02 10 views
1

私はradioButtonを保持する3つのDataGridTemplateColumnを含むデータグリッドを持っています。 は今、私は後ろの私のコードでは、ボタンのクリックイベントからラジオボタンの「ISENABLED」プロパティをコントロールしたい:control RadioButton DataGridTemplateColumn from code

<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の」プロパティが機能しないと、私ができること」私のコードからradioButtonプロパティにアクセスするようです(xamlで宣言したx:nameでさえも)。 私はこれを試しました: WPF Toolkit DataGrid SelectionChanged Getting Cell Value と他の多くのチュートリアル/ブログの投稿が動作することができませんでした。 アイデア?それはDataTemplateをではなく、メインのコンテンツツリーに定義されているため、名前:あなたのreadiobuttonが読み取り専用であることを確認する

答えて

1

を設定することです。コードから背後trueまたはfalseに設定し、その後aaa.IsReadOnly

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

をそして:

代わりに(あなたの最後の列に基づいて)このようなDataTemplateColumnsを定義します。この変更は、このDataGridColumnに属するすべてのDataGridCellに伝播する必要があります。このDataGridColumnは、バインディングのためにRadioButton.IsEnabledを変更します。

XAMLスニペットはブール値を反転するコンバータであるBooleanOppositeConverterを使用します。

0

はあなたがxでラジオボタンにアクセスすることはできませんIsHitTestVisible

<DataGridTemplateColumn ...> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <RadioButton ....IsHitTestVisible="False"/>    
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
関連する問題