2017-03-06 76 views
0

我在我的WPF metroWindow上有一个MahApps.Metro DataGrid,它有一个List<files>绑定到它。MahApps DataGridCheckBoxColumn IsReadOnly属性

我的文件类的属性之一是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"然后该复选框变为只读。

回答

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