我正在寻找一种方法来禁用WPF DataGrid中的一些单元格。由于isReadOnly不是DependencyProperty,我无法使用它。
还有其他办法吗?
我想写这样的东西:
<DataGridTextColumn IsReadOnly="{Binding Path=Value,Converter={StaticResource ValueToBooleanConverter}}" />
但是任何方式如何做到这一点都会很好,因为我没有看到方法,而是将数据拆分为不同的DataGrid's
。
答案 0 :(得分:3)
如果您不能将列设为只读,则可以转到单元格级别。例如,通过制作Style
并将其添加到所需列:
<DataGridTextColumn Binding="{Binding TextProperty}">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="IsEnabled"
Value="{Binding Path=Value,Converter={StaticResource ValueToBooleanConverter}}" />
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
我在这里创建了Style
内部列但是cource可以将它移动到资源并按键在任何所需的列中引用(但是你必须为该样式访问shure转换器)。 Cell`s IsReadOnly
似乎没有一个二传手,所以我在这里使用IsEnabled
,这很好地完成了工作。
答案 1 :(得分:0)
您可以使用 DataGrid.OnBeginningEdit
事件:
void DataGrid_OnBeginningEdit(object sender, DataGridBeginningEditEventArgs e)
{
DataGridRow row = e.Row;
var viewModel = (YourViewModel) row.Item;
if (<Test to check if it is the expected column>
&& viewModel.Value == <?>) e.Cancel = true;
}
这不会破坏 MVVM。该行为由您的视图模型的属性(您可以测试的内容)驱动,并且只有基本代码可以将该属性绑定到视图。