绑定到WPF中的数组

时间:2011-12-02 21:43:09

标签: c# wpf xaml data-binding

我正在研究WPF应用程序。出于某种原因,我的视图模型中的值未显示

MyViewModel.cs

public class MyViewModel : ViewModel
{
  private ObservableCollection<Item> items = Item.GetAll();
  public ObservableCollection<Item> Items
  {
    get { return items; }
    set { items = value; }
  }
}

public class Item
{
  public int ID { get; set; }

  public List<int> Tally = new List<int>();

  public int Total { get; set; }

  public Item(int id)
  {
    this.ID = id;
    for (int i = 0; i < 7; i++)
      this.Tally.Add(0);
  }

  public static ObservableCollection<Item> GetAll()
  {
    ObservableCollection<Item> items = new ObservableCollection<Item>();
    for (int i = 0; i <= 10; i++)
    {
      items.Add(new Item(i));
    }
    return items;
  }
}

MyPage.xaml

<telerik:RadGridView x:Name="myGridView" Grid.Row="1" AutoGenerateColumns="False" 
  ItemsSource="{Binding Path=Items}">
  <telerik:RadGridView.Columns>
    <telerik:GridViewDataColumn Header="ID" DataMemberBinding="{Binding Path=ID}" IsReadOnly="True" />
    <telerik:GridViewDataColumn Header="Monday" DataMemberBinding="{Binding Path=Tally[0], Mode=OneWay}" IsReadOnly="True" Width="1*" />
    <telerik:GridViewDataColumn Header="Tuesday" DataMemberBinding="{Binding Path=Tally[1], Mode=OneWay}" IsReadOnly="True" Width="1*" />
    <telerik:GridViewDataColumn Header="Wednesday" DataMemberBinding="{Binding Path=Tally[2], Mode=OneWay}" IsReadOnly="True" Width="1*" />
    <telerik:GridViewDataColumn Header="Thursday" DataMemberBinding="{Binding Path=Tally[3], Mode=OneWay}" IsReadOnly="True" Width="1*" />
    <telerik:GridViewDataColumn Header="Friday" DataMemberBinding="{Binding Path=Tally[4], Mode=OneWay}" IsReadOnly="True" Width="1*" />
    <telerik:GridViewDataColumn Header="Total" DataMemberBinding="{Binding Path=Total, Mode=OneWay}" />
  </telerik:RadGridView.Columns>
</telerik:RadGridView>

每个项目的条目按预期显示在网格中。但是,只有第一列和最后一列具有值。星期一到星期五列中的值(引用Tally List的列)没有出现。我不确定我做错了什么。有人可以告诉我吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

Tallyfield,需要是公开property

(如果你想改变运行时,我也希望你知道INPC

答案 1 :(得分:0)

您没有在可观察集合中的任何位置使用Tally项目,无论是静态方法返回的本地集合还是viewmodel中的observable集合。

项目应该只是一个域类型对象(具有一些自动getter和setter属性)。您应该创建一个服务并将其命名为 ItemsRepository ,它将返回 IEnumerable&lt;在存储库中调用 GetAll()时,可以使用项目&gt; 集合。如果可以的话,总是尽量避免使用任何静态的东西,特别是一个会返回集合的方法。