DataGrid只读取单个单元格

时间:2013-12-02 14:41:27

标签: c# wpf .net-4.0 wpfdatagrid

我正在寻找一种方法来禁用WPF DataGrid中的一些单元格。由于isReadOnly不是DependencyProperty,我无法使用它。

还有其他办法吗?

我想写这样的东西:

<DataGridTextColumn IsReadOnly="{Binding Path=Value,Converter={StaticResource ValueToBooleanConverter}}" /> 

但是任何方式如何做到这一点都会很好,因为我没有看到方法,而是将数据拆分为不同的DataGrid's

2 个答案:

答案 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。该行为由您的视图模型的属性(您可以测试的内容)驱动,并且只有基本代码可以将该属性绑定到视图。