我有一个数据网格,它在运行时绑定到一个列表。
这是它的定义,
<DataGrid Name="EmployeeContentView"
Margin="10,10,10,10"
RowHeight="20"
AutoGenerateColumns="True"
ItemsSource="{Binding}"
Height="auto" Width="auto">
</DataGrid>
这是我将此数据网格绑定到的类,
public class Employee_Details
{
private String eid;
private String ename;
private bool ispresent;
public String eID
{
get { return eid; }
}
public String eNAME
{
get { return ename; }
}
public bool IsPRESENT
{
get { return ispresent; }
}
}
现在,我想为员工设置一个状态标志,无论他/她是否在场。因此,我想根据状态标志"IsPresent"在每行的第一列中显示一个图标。
下面是一个类似的问题 WPF 数据网格图标和布尔值。但是数据网格的完整定义是什么?
我是WPF的新手。所以,有点困惑我是如何做到这一点的.提前感谢一吨。
你遇到了什么问题? 链接的问题非常复制/粘贴,只需稍作更改即可开始使用您的代码:
<DataGrid Name="EmployeeContentView"
Margin="10,10,10,10"
RowHeight="20"
AutoGenerateColumns="True"
ItemsSource="{Binding}"
Height="auto" Width="auto">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Married">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image x:Name="IMG" Source="present.png" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=IsPRESENT}" Value="False">
<Setter Property="Source" Value="notpresent.png" TargetName="IMG"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
请注意,就我而言,我在项目中添加了 2 张图像,present.png
和 notpresent.png
,它们的BuildAction
设置为 Resource
。
顺便说一句,如果您计划让用户从网格更改IsPRESENT
的值,则必须更改类定义以实现INotifyPropertyChanged
,否则绑定不会更新,因为网格不会知道某些内容已更改:
public class Employee_Details : INotifyPropertyChanged
{
private String eid;
private String ename;
private bool ispresent;
public String eID
{
get { return eid; }
set
{
if (eid == value)
return;
eid = value;
this.OnPropertyChanged("eID");
}
}
public String eNAME
{
get { return ename; }
set
{
if (ename == value)
return;
ename = value;
this.OnPropertyChanged("eNAME");
}
}
public bool IsPRESENT
{
get { return ispresent; }
set
{
if (ispresent == value)
return;
ispresent = value;
this.OnPropertyChanged("IsPRESENT");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}