基于布尔值在数据网格的每一行中显示图标



我有一个数据网格,它在运行时绑定到一个列表。

这是它的定义,

<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.pngnotpresent.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));
    }
}

最新更新