![](/img/trans.png)
[英]InvalidOperationException when trying to edit a DataGrid cell
[英]InvalidOperationException in WPF form when trying to change cell color in DataGrid
我不能说我是WPF的新手,因为那太多了。 我只是得到了WPF应用程序来维护...
我需要基于一个值更改DataGrid
的特定单元格颜色。 我认为这很容易,因此发现: 根据值更改DataGrid单元格颜色 。
粘贴它所属的位置,这给了我以下几点:
<DataGrid x:Name="DgDevices" ItemsSource="{Binding}" BorderThickness="2,0,2,2" Cursor="Cross">
<DataGrid.ContextMenu>
<ContextMenu >
<MenuItem Header="Załóż Deblokadę" Click="InsertDBL" />
<MenuItem Header="Usuń Deblokadę" Click="RemoveDBL"/>
</ContextMenu>
</DataGrid.ContextMenu>
<DataGridTextColumn Binding="{Binding Name}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="Text" Value="1">
<Setter Property="Background" Value="Black"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid>
现在,在此表单上调用Show
方法时,它给了我InvalidOperationException
。 我搜索了为什么会发生这种情况的解释,但没有找到明确的解释。
另外,我知道Binding Name
是我的绑定的占位符(在<DataGridTextColumn Binding="{Binding Name}">
),所以我厌倦了仅将Binding
放在那里(受DataGrid
节点中的ItemsSource="{Binding}"
启发),但是没有解决问题。
现在,您正在将DataGridTextColumn
直接添加到DataGrid
本身,而不是添加到其列列表中。 直接添加项目和使用ItemsSource
是互斥的,因此会引发InvalidOperationException
(而且您也无意将列添加为项目)。 而是这样做:
<DataGrid x:Name="DgDevices"
ItemsSource="{Binding}"
BorderThickness="2,0,2,2"
AutoGenerateColumns="False"
Cursor="Cross">
<DataGrid.ContextMenu>
<ContextMenu >
<MenuItem Header="Załóż Deblokadę" Click="InsertDBL" />
<MenuItem Header="Usuń Deblokadę" Click="RemoveDBL"/>
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns> <!-- add to columns -->
<DataGridTextColumn Binding="{Binding Name}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="Text"
Value="1">
<Setter Property="Background"
Value="Black" />
<Setter Property="Foreground"
Value="White" />
</Trigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
另外,由于您需要将AutoGenerateColumns
设置为False
,否则, DataGrid
除了手动定义的列之外,还会从数据源自动生成列,并且您很少需要它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.