MVVM - 在RadGridView中动态添加一列

时间:2015-01-27 16:04:37

标签: wpf mvvm telerik radgridview

我的应用程序在MVVM中。我有一个Telerik RadGridview,其中2列是Databound,我必须使用RowNumbers动态生成第三列。  这是我的代码。我在第三个(动态生成的)列中获取(集合)。其他2列很好。请帮帮我。



XAML:

  < telerik: RadGridView Name = "TestGridView"
ItemsSource = "{Binding TestListView}"
AutoGenerateColumns = "False" >
  < telerik: RadGridView.Columns >
  < telerik: GridViewColumn Header = "RowCount" >
  < telerik: GridViewColumn.CellTemplate >
  < DataTemplate >
  < StackPanel >
  < TextBlock Text = "{Binding TestRowNumber}" / >
  < /StackPanel>
                                     </DataTemplate >
  < /telerik:GridViewColumn.CellTemplate>
                             </telerik: GridViewColumn >
  < telerik: GridViewDataColumn DataMemberBinding = "{Binding FirstName}"
Header = " Name" / >
  < telerik: GridViewDataColumn DataMemberBinding = "{Binding Salary}"
Header = "Salary" / >
  < /telerik:RadGridView.Columns>
  </telerik: RadGridView >

  ViewModel:

  public void Testupdate() {
    RadObservableCollection < int > rno = new RadObservableCollection < int > ();
    for (int i = 1; i <= TestList.Count; i++) {
      rno.Add(i);
    }
    TestRowNumber = rno;
  }

private RadObservableCollection < int > _testRowNumber;
public RadObservableCollection < int > TestRowNumber {
  get {
    return _testRowNumber;
  }
  set {
    _testRowNumber = value;

    OnPropertyChanged();
  }
}
&#13;
&#13;
&#13;

     }

它在rno中显示正确的计数,项目为1到6.但是当在网格上显示时,它显示(集合)。我无法追查我错在哪里。请纠正我。

谢谢。

1 个答案:

答案 0 :(得分:1)

名为TestRowNumber的属性定义为RadObservableCollection<int> 根据你的代码,这个系列被绑定到TestBlock的文本&#39;属性。在绑定集合期间,ToString()方法被调用,你得到你所看到的。假设FirstName和Salary是Employee类的属性,您可以执行以下操作:

class Employee
{
    public int Index { get; set; }
    public string Name { get; set; }
    public double Salary { get; set; }
}

class ViewModel
{
    private int imployeeIndex = 1;
    public ObservableCollection<Employee> Employees { get; private set; }

    public ViewModel()
    {
        Employees = new ObservableCollection<Employee>();
        for (int i = 0; i < 10; i++)
            AddNewEmployee("Name" + i, i * 1000);
    }

    public void AddNewEmployee(string name, double salary)
    {
        Employees.Add(new Employee { Index = imployeeIndex++, Name = name, Salary = salary });
    }
}

<telerik:RadGridView ItemsSource= "{Binding Employees}" AutoGenerateColumns = "False" >
    <telerik:RadGridView.DataContext>
          <local:ViewModel/>
    </telerik:RadGridView.DataContext>
    <telerik:RadGridView.Columns>
        <telerik:GridViewColumn Header = "RowCount" >
            <telerik:GridViewColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text = "{Binding Index}" />
                </DataTemplate >
            </telerik:GridViewColumn.CellTemplate>
        </telerik:GridViewColumn >
        <telerik:GridViewDataColumn DataMemberBinding = "{Binding Name}" Header = "Name" />
        <telerik:GridViewDataColumn DataMemberBinding = "{Binding Salary}" Header = "Salary" />
    </telerik:RadGridView.Columns>
</telerik:RadGridView>