如何将DataGrid的itemssource设置为ViewModel中的某个数组

时间:2011-04-21 04:37:14

标签: wpf mvvm datagrid

这是我的尝试:

<DataGrid 
    Grid.Row="0" 
    AutoGenerateColumns="True"  
    ItemsSource="{Binding Path = Workers}" 
    Grid.ColumnSpan="1" 
    Name="DataGrid">
</DataGrid>
private Worker[] workers;
public Worker[] Workers
{
    get
    {
        if (IsInDesignMode) return null;
        return serviceAgent.ParseFile("dataWorkers.xml").ToArray() ;
    }
    set
    {
        workers = value;
        NotifyPropertyChanged(m => m.Workers);
    }
}

但我的DataGrid仍然是空的。我做错了什么?

2 个答案:

答案 0 :(得分:1)

尝试将DataSet或DataTable用作ItemsSource。或者改用ListBox。

此外,您可以尝试另一种做法: http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.itemssource(VS.95).aspx#Y428

它对我有用。

答案 1 :(得分:1)

像我所宣传的那样工作。以下结果为我自动填充可编辑的可排序网格。所以首先从伪造worker数组开始,如下所示,看它是否有效。 如果是,请调查您的ParseFile方法。如果没有,请查看您是否正确设置了数据绑定 - 首先将假数组放入视图中。

  • XAML

=

<StackPanel>
        <DataGrid  AutoGenerateColumns="True"  
                   ItemsSource="{Binding Path = Workers}" 
                   x:Name="DataGrid"/>
  • 代码隐藏

=

public class Worker    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

public class MainViewModel
{
   public Worker[] Workers        {
            get            {
                return new[]{
                               new Worker {Id = 1, Name = "Cristiano"}, 
                               new Worker {Id = 2, Name = "Lionel"},
                               new Worker {Id = 3, Name = "Xavi"}
                           };
            }
        } ....