2016-05-19 1 views
0

Я новый стартер WPF, и у меня проблемы с достижением незначительной вещи.WPF Отключение DataGridCheckBoxColumn на основе наблюдаемого свойства коллекции

У меня есть ViewModel, который имеет ObservableCollection Заказ и который имеет два реквизита

  • IsSelected (чтобы указать, что заказ был выбран в сетке)
  • EnableOrder (указать, если можно выбрать заказ).

Однако флажок не отключен, если Приказы/EnableOrder являются ложными.

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

Это работает, когда я жесткий код ложных, как показано ниже

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

Кроме того, я был не в состоянии определить связывание, как показано ниже, как EnableOrder не видимый в XAML intellisense.

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

Пожалуйста, обратите внимание, что были и другие переплеты просто DataGridTextColumn, что я имел внутри сетки и привязки работали без каких-либо проблем

+2

Я бы предположил, что intellisense не потянет EnableOrder, поскольку вы в стиле, и этот стиль может применяться к нескольким элементам, которые могут иметь разные DataContexts. Итак, если вы привязываетесь к EnableOrder, хотя нет никакого intellisense, вы все еще можете создавать и запускать, и если это так работает? –

+0

Игнорировал Intellisense, и я смог заставить его работать. –

ответ

1

Я думаю, что связывание было неправильно. Проверьте приведенный ниже код. Также проверьте окно вывода для любых ошибок привязки.

<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 Нашел для работы:

Я предположил бы, что IntelliSense не будет тянуть до EnableOrder, так как вы в стиле и стиль может применяться к нескольким пунктам которые могут иметь разные DataContexts. Итак, если вы привязываетесь к EnableOrder, хотя нет никакого intellisense, вы все еще можете создавать и запускать, и если это так работает?

Смежные вопросы