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 = false
和 ReadOnly = 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;
}
}
}
我的 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 = false
和 ReadOnly = 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;
}
}
}