[英]Accessing a particular row/column in a dataGrid in WPF
最近,我才刚刚开始学习WPF。 尽管我大部分的开发经验都来自Win Forms,但我已经相当顺利地过渡到WPF。
OVERVIEW
我正在编写一个程序,用于比较两个单独的dataTables中的信息,并反映出dataGrid中所做的更改。
dataTables代表“旧信息”和“新信息”的列表。 比较dataTables之后,我希望根据“新信息表”中是否进行了更改来突出显示特定的单元格。
例如,如果dataGrid([0] [0])中的第一个单元格包含“旧信息”数据表中的“ 3”,而“ New Information”数据表中的相同单元格([0] [0])包含“ 5”。 我希望将背景颜色更改为黄色,以反映此更改。
PROBLEM
我目前正在处理两个dataGrid对象,这些对象正在填充中,并表示两个dataTables(“旧信息”和“新信息”)。 我遇到的问题是我似乎无法很好地访问特定的行或列。 我希望能够访问特定的行/单元格,以便可以通过代码更改背景色。
Comments
我记得当我使用Win Forms时,可以按照dataGrid1.Rows [rowNumber] .Columns [ColumnNumber]的方式执行某些操作,以访问特定的行/列。
到目前为止,我从WPF的DataGrid中了解的更多内容是基于对象的或类似的东西,这使得访问特定行/列的过程略有不同/繁琐。 如果您碰巧知道如何在WPF中访问dataGrid中的行/单元格内容,请告诉我。 任何简单的例子将不胜感激。
您是对的,DataGrid非常适合数据绑定,并且可能很难以编程方式访问和操纵其中的行,列和单元格。 使用WPF时,最好采用MVVM路由。 在您的情况下,您可以使用基础数据来驱动单元格颜色,而不必尝试编写代码隐藏代码来实现此目的。
MVVM是一个很大的主题,但是作为可能涉及的内容的一种,您通常会创建一个“模型”类来表示要显示在网格行中的实体。 您的视图模型将公开这些对象的集合,这些对象绑定到网格并呈现为单独的行(通常,您将在XAML中手动定义列,将它们绑定到模型类的单独属性)。
在不知道您的特定网格显示什么的情况下很难提供示例。 但是,假设您要列出客户详细信息-第一列可能是名称,第二列可能是地址,依此类推。 一种解决方案可能是在模型类上包括其他布尔属性,以指示特定属性值是否与其“旧”对应值不同。 数据触发器可以使用这些属性来更改单元格背景色,而数据触发器位于应用于数据网格列的CellStyles中。
快速而肮脏的代码示例浮出水面,因此可能不是100%正确的:
public class Customer
{
public string CustomerName {get; set;}
public string CustomerAddress {get; set;}
public bool CustomerNameDiffers {get; set;}
public bool CustomerAddressDiffers {get; set;}
}
public class MyViewModel
{
public ObservableCollection<Customer> Customers {get; set;}
//etc..
}
XAML:
<Window.Resources>
<Style x:Key="CustomerNameCellStyle"
TargetType="DataGridTextColumn">
<Style.Triggers>
<DataTrigger Binding="{Binding CustomerNameDiffers}"
Value="True">
<Setter Property="Background"
Value="Yellow" />
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<DataGridTextColumn Binding="{Binding CustomerName}"
CellStyle="{StaticResource CustomerNameCellStyle}"
... />
我意识到这是一个笼统的答案,但是MVVM是一个大话题,但是如果您要充分利用WPF并摆脱Winforms的代码隐藏习惯,则很值得获得理解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.