2017-03-06 96 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; 
     } 
    } 
}