2010-11-28 3 views
2

Je veux lier mon DataGrid qui est dans le fichier XAML collection qui ne sont pas dans le code sous-jacent, mais dans un fichier csveulent lier la liste de fichiers Cs à la grille en XAML avec en tout code dans le code derrière

J'ai essayé différentes méthodes mais pas de succès, en fait je ne veux pas écrire de code dans le code derrière le fichier.

Code classe

public class Employee : INotifyPropertyChanged 
{    
    private int _Id; 
    private string _FirstName; 
    private string _LastName; 
    private double _Salary; 
    public event PropertyChangedEventHandler PropertyChanged; 

    public Employee() 
    { 
    } 
    public Employee(int pId, string pFirstName, string pLastName, double pSalary) 
    { 
     Id = pId; 
     FirstName = pFirstName; 
     LastName = pLastName; 
     Salary = pSalary; 
    } 

    public int Id 
    { 
     set 
     { 
      _Id = value; 
      NotifyPropertyChanged("Id"); 
     } 
     get { return _Id; } 
    } 
    public string FirstName 
    { 
     set 
     { 
      _FirstName = value; 
      NotifyPropertyChanged("FirstName"); 
     } 
     get { return _FirstName; } 
    } 
    public string LastName 
    { 
     set 
     { 
      _LastName = value; 
      NotifyPropertyChanged("LastName"); 
     } 
     get { return _LastName; } 
    } 
    public double Salary 
    { 
     set 
     {    
      _Salary = value; 
      NotifyPropertyChanged("Salary"); 
     } 
     get { return _Salary; } 
    } 
    private void NotifyPropertyChanged(string pProperty) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(pProperty)); 
    } 
} 


public class EmployeeCollection 
{ 
    ObservableCollection<Employee> lstEmp = new ObservableCollection<Employee>(); 
    public ObservableCollection<Employee> GetEmployees() 
    { 
      lstEmp.Add(new Employee(1,"Firstname 1", "Lastname 1", 1.1)); 
      lstEmp.Add(new Employee(2, "Firstname 2", "Lastname 2", 2.2)); 
      lstEmp.Add(new Employee(3, "Firstname 3", "Lastname 3", 3.3)); 
      lstEmp.Add(new Employee(4, "Firstname 4", "Lastname 4", 4.4)); 
      lstEmp.Add(new Employee(5, "Firstname 5", "Lastname 5", 5.5)); 
      lstEmp.Add(new Employee(6, "Firstname 6", "Lastname 6", 6.6)); 

      return lstEmp; 
    } 
} 

son code XAML

<my:DataGrid AutoGenerateColumns="true" Margin="20,0,68,10" Name="dataGrid2" Height="135" VerticalAlignment="Bottom" /> 
+0

C'est une conception étrange. Pourquoi un employé a-t-il d'autres employés? La méthode ne devrait-elle pas être statique? – svick

Répondre

0

Si je pouvais modifier la classe d'une manière qui fait sens pour moi, je changerais GetEmployees() à une propriété statique . Vous pouvez alors simplement écrire (local est un préfixe d'espace de noms pour l'espace de noms contenant Employee):

<DataGrid ItemsSource="{x:Static local:Employee.Employees}" /> 

Si vous voulez garder la classe la façon dont il est, d'abord déclarer une ObjectDataProvider comme une ressource (par exemple dans <Window.Resources>):

<ObjectDataProvider ObjectType="local:Employee" MethodName="GetEmployees" 
    x:Key="employees" /> 

Et puis utilisez que:

<DataGrid ItemsSource="{Binding Source={StaticResource employees}}" /> 
0

Ce que vous faites est que vous définissez le DataContext dans le fichier codebehind à votre source de données, puis dites à votre DataGrid de se lier à cela. Il est fait comme ceci:

C#:

public MainWindow() 
     { 
      InitializeComponent(); 

      Employee emp = new Employee(); 
      DataContext = emp.GetEmployees(); 

     } 

XAML:

<DataGrid AutoGenerateColumns="true" Margin="20,0,68,10" Name="dataGrid2" Height="135" VerticalAlignment="Bottom" ItemsSource="{Binding}" /> 
+0

merci pour la réponse ... mais je ne veux pas mettre de code dans le code derrière le fichier que j'ai mentionné dans la description de la question, je veux faire tout dans le fichier XAML. Je sais que c'est possible mais comment? – Azhar

Questions connexes