2014-01-11 69 views
1

我有一個在運行時綁定到列表的數據網格。基於布爾值在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」在每一行的第一列顯示一個圖標。

這是一個類似的問題WPF DataGrid icon and boolean value。但是datagrid的完整定義是什麼?

Iam是WPF的新手。所以,對我如何實現這個目標有點困惑。 感謝提前一噸。

回答

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

謝謝噸tencntraze .. Iam新來WPF。任何好的博客或論壇你都想提出建議? – Surjeet