MahApps DataGridCheckBoxColumn IsReadOnly属性

时间:2017-03-06 13:08:46

标签: datagrid mahapps.metro

我的WPF MahApps.Metro DataGrid上有metroWindow,其List<files>绑定了ReadOnly

我的文件类的一个属性是IsReadOnly。一个布尔值,我想将其绑定到DataGridCheckBoxCoumn复选框的<DataGrid x:Name="dataGrid" AutoGenerateColumns="False" CanUserAddRows="False" ItemsSource="{Binding filesSource}" <DataGrid.Columns> <DataGridCheckBoxColumn Binding="{Binding Process}" ElementStyle="{DynamicResource MetroDataGridCheckBox}" EditingElementStyle="{DynamicResource MetroDataGridCheckBox}" IsReadOnly="{Binding ReadOnly}"/> <DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True"/> <DataGridTextColumn Header="Status" Binding="{Binding Status}" IsReadOnly="True"/> </DataGrid.Columns> </DataGrid> 属性。

我目前有以下XAML,但这似乎不起作用。

ReadOnly = false

当我运行应用程序时,我可以切换ReadOnly = trueReadOnly = false复选框的状态。我希望只能切换IsReadOnly="True"

的复选框

我对WPF相对较新并且在线学习所有内容(自学成才),所以对于我做错的任何建议都非常感谢:)

修改 如果我手动设置{{1}},则该复选框将变为只读。

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法 - 感谢MSDN post

我更新了DataGrid,以便DataGrid.Columns包含以下DataGridCheckBoxColumn

<DataGridCheckBoxColumn Binding="{Binding Process}" 
                        ElementStyle="{DynamicResource MetroDataGridCheckBox}"
                        EditingElementStyle="{DynamicResource MetroDataGridCheckBox}">
    <DataGridCheckBoxColumn.CellStyle>
        <Style TargetType="DataGridCell">
            <EventSetter Event="PreviewMouseDown" Handler="DataGridCell_PreviewMouseDown"/>
        </Style>
     </DataGridCheckBoxColumn.CellStyle>
</DataGridCheckBoxColumn>

然后在我的XAML代码后面我有以下

private void DataGridCell_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    DataGridCell cell = sender as DataGridCell;
    if (cell != null)
    {
        file item = cell.DataContext as file;
        if (item != null && item.ReadOnly)
        {
            e.Handled = true;
        }
    }
}