2010-11-28 53 views
2

我想我的DataGrid是在XAML文件,收集这是不是在后面的代码绑定,但在CS文件要从铯文件与代码绑定列表网格在XAML任何代码背后

我尝试了不同的方法,但没有成功,实际上我不想在代码后面编写任何代码。

类代码

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; 
    } 
} 

它的XAML代码

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

这是一个奇怪的设计。为什么员工有其他员工。该方法不应该是静态的吗? – svick 2010-11-28 17:46:22

回答

0

如果我能的方式,对我来说很有意义修改类,我会改变GetEmployees()的静态属性。然后,你可以简单的写(local是包含Employee的命名空间的命名空间前缀):

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

如果你想保留类事情是这样的,首先声明一个ObjectDataProvider为资源(在<Window.Resources>如):

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

,然后使用:

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

你要做的就是在代码隐藏文件到您的数据源设置的DataContext,然后告诉你的DataGrid绑定到。它的完成是这样的:

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

感谢您的回复......但我不想将任何代码放在我在问题描述中提到的文件后面,我想在Xaml文件中完成所有操作。我知道它可能但是如何? – Azhar 2010-11-28 10:04:06

相关问题