MahApps DataGridCheckBoxColumn IsReadOnly 属性

MahApps DataGridCheckBoxColumn IsReadOnly property

我的 WPF metroWindow 上有一个 MahApps.Metro DataGrid,它绑定了一个 List<files>

我的文件 class 的属性之一是 ReadOnly。一个布尔值,我想将其绑定到 DataGridCheckBoxCoumn 复选框的 IsReadOnly 属性。

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

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

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

的复选框

我是 WPF 的新手,所有的东西都是在线学习的(自学),所以非常感谢任何关于我做错了什么的建议:)

编辑: 如果我手动设置 IsReadOnly="True" 然后复选框变为只读。

我找到了解决问题的办法 - 多亏了这个 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;
        }
    }
}