WPF基于可观察的集合属性禁用DataGridCheckBoxColumn

时间:2016-05-19 22:39:21

标签: c# wpf xaml wpfdatagrid

我是一名新的WPF首发,我在完成一件小事时遇到了麻烦。

我有一个具有ObservableCollection的viewModel 订单和那有两个道具

  • IsSelected(表示已在网格中选择订单)
  • EnableOrder(表示是否可以选择订单)。

但是,当Orders / EnableOrder为false时,不会禁用该复选框。

<include layout="@layout/XML2"/>

当我像下面的

那样硬编码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>

此外,由于在XAML intellisense中看不到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>

请注意,我在网格中有其他简单的DataGridTextColumn绑定,绑定工作没有任何问题

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

复制评论作为答案,因为OP发现它起作用:

我认为intellisense不会启动EnableOrder,因为你处于Style中并且Style可能适用于可能具有不同DataContexts的多个项目。因此,如果您绑定到EnableOrder,即使没有任何智能感知,您仍然可以构建和运行,如果是这样,它会起作用吗?