2016-05-19 24 views
0

私は新しいWPFスターターであり、マイナーなことを達成するのに問題があります。WPF観測可能なコレクションプロパティに基づいてDataGridCheckBoxColumnを無効にする

IがのObservableCollection 順序を有し、それは順番に選択することができるかどうかを示すために2本の支柱

  • IsSelected(順序はグリッド内で選択されたことを示すために)
  • EnableOrderを有する(ビューモデルを有します)。

ただし、Orders/EnableOrderがfalseの場合、チェックボックスは無効になりません。

<DataGrid ItemsSource="{Binding Orders}"> 
 
      <DataGrid.Columns> 
 
       <DataGridCheckBoxColumn Binding="{Binding IsSelected}"> 
 
        <DataGridCheckBoxColumn.CellStyle> 
 
        <Style TargetType="DataGridCell"> 
 
         <Setter Property="IsEnabled" Value="{Binding Orders/EnableOrder}" /> 
 
        </Style> 
 
        </DataGridCheckBoxColumn.CellStyle> 
 
       </DataGridCheckBoxColumn>     
 
      </DataGrid.Columns> 
 
</DataGrid>

それはEnableOrderではないよう

<DataGrid ItemsSource="{Binding Orders}"> 
 
      <DataGrid.Columns> 
 
       <DataGridCheckBoxColumn Binding="{Binding IsSelected}"> 
 
        <DataGridCheckBoxColumn.CellStyle> 
 
        <Style TargetType="DataGridCell"> 
 
         <Setter Property="IsEnabled" Value="False" /> 
 
        </Style> 
 
        </DataGridCheckBoxColumn.CellStyle> 
 
       </DataGridCheckBoxColumn>     
 
      </DataGrid.Columns> 
 
</DataGrid>

以下のような偽Iハードコードはまた、私は以下のように結合を指定することができなかった時に動作しますXAMLインテリセンスに表示されます。

<Setter Property="IsEnabled" Value="{Binding EnableOrder}" /> 

私は、グリッド内で持っていたとバインディングは、私はバインディングが間違っていたと思いますどんな問題

+2

私はあなたがスタイルにあり、スタイルが異なるDataContextを持つ可能性のある複数のアイテムに適用される可能性があるため、IntellisenseはEnableOrderをプルアップしないと思います。したがって、たとえIntelliSenseが存在しないにもかかわらずEnableOrderにバインドすれば、まだビルドして実行することができますか?そうであれば動作しますか? –

+0

Intellisenseを無視し、私はそれを働かせることができました。 –

答えて

1

ずに働いていた他の単純なDataGridTextColumnバインディングがあったことに注意してください。下記のコードで確認してください。また、バインディングエラーの出力ウィンドウも確認してください。

<DataGrid ItemsSource="{Binding Orders}"> 
       <DataGrid.Columns> 
        <DataGridCheckBoxColumn Binding="{Binding IsSelected}"> 
         <DataGridCheckBoxColumn.CellStyle> 
         <Style TargetType="DataGridCell"> 
          <Setter Property="IsEnabled" Value="{Binding EnableOrder}" /> 
         </Style> 
         </DataGridCheckBoxColumn.CellStyle> 
        </DataGridCheckBoxColumn>     
       </DataGrid.Columns> 
    </DataGrid> 
0

回答としてコピーコメントOPはそれが機能することが分かっているので:

私はあなたのスタイルであるため、インテリセンスがEnableOrderを引き上げないでしょうし、そのスタイルは、複数のアイテムに適用される場合がありますことを想像します異なるDataContextを持つ可能性があります。したがって、たとえIntelliSenseが存在しないにもかかわらずEnableOrderにバインドすれば、まだビルドして実行することができますか?そうであれば動作しますか?

関連する問題