Wpf 取消设置滚动数据网格上GridViewCell的背景色

Wpf 取消设置滚动数据网格上GridViewCell的背景色,wpf,wpfdatagrid,radgridview,Wpf,Wpfdatagrid,Radgridview,我在网格单击中设置特定的单元格背景。但在网格上滚动它会设置回默认值。我建议不要将EnableRowVirtualization用作False。 这是我的代码: <telerik:RadGridView ItemsSource="{Binding PersonList}" Name="grid" Height="200" PreviewMouseUp="grid_PreviewMouseUp" > private void grid_PreviewMouseUp(object sen

我在网格单击中设置特定的单元格背景。但在网格上滚动它会设置回默认值。我建议不要将EnableRowVirtualization用作False。 这是我的代码:

<telerik:RadGridView ItemsSource="{Binding PersonList}" Name="grid"
Height="200" PreviewMouseUp="grid_PreviewMouseUp" >

private void grid_PreviewMouseUp(object sender, MouseButtonEventArgs e)
{
    var cell = (sender as RadGridView).CurrentCell;
    cell.Background = Brushes.Aqua;
}

专用void grid_PreviewMouseUp(对象发送器,鼠标按钮ventargs e)
{
变量单元格=(发送方为RadGridView)。CurrentCell;
cell.Background=画笔.Aqua;
}

谢谢

只需从内存中删除滚动后未显示的单元格即可。因此,您不能仅仅更改可视元素的属性。您需要在模型类中保存所选单元格的信息。您应该在模型类中使用某些属性(
SelectedColumns
)来保存当前值 选定列(或多个列)。您可以在单击中设置此信息 处理程序(或您已经在讨论中描述的)。那么你需要 使用转换器创建绑定(例如-
ValueToColorConverter
),内部使用
SelectedColumns
属性和当前单元格的信息返回必要的背景色

GridViewCell示例:

<Style TargetType="telerik:GridViewCell" BasedOn="{StaticResource GridViewCellStyle}">
    <Setter Property="Background" Value="{Binding Converter={StaticResource ValueToColorConverter}}" />
</Style>


第二种方法-使用

你想实现什么?我的意思是,你点击一个单元格,它的背景就会改变。。。但是当你点击另一个单元格时会发生什么呢?第一个单元格是否保持有色,还是应恢复为以前的背景色?单击一个单元格除了改变它的颜色(比如设置项目的某些属性)之外,还有其他作用吗?我的主要问题是,当我滚动网格并返回到第一个位置时,彩色单元格设置为默认背景。我希望在我的项目中的复杂场景中使用此功能。谢谢你们的评论。我希望通过用户点击而不是通过计算单元格的值来设置单元格的颜色。谢谢你的评论。我是怎么说的:你可以在click handler中设置这些信息(或者正如你在问题中已经描述的),如果你想使用虚拟化,你必须在Model或ViewModel中保存关于所选单元格的信息。