我有一个datagrid,它在运行时被绑定到一个列表。
这是它的定义,
<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”在每行的第1列显示一个图标。
这是一个类似的问题WPF DataGrid icon and boolean value。但是datagrid的完整定义是什么?
我是WPF的新手。所以,我对如何实现这一点有点困惑。 非常感谢。
答案 0 :(得分:2)
您遇到了什么问题?链接的问题是非常复制/粘贴,只需稍作更改即可使用您的代码:
<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));
}
}