在WPF中绑定到一个数组

本文关键字:一个 数组 WPF 绑定 | 更新日期: 2023-09-27 18:16:26

我正在开发一个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>

每个Item的条目按预期出现在网格中。但是,只有第一列和最后一列有值。星期一至星期五列(引用计数列表的列)中的值不显示。我不确定我做错了什么。有人能告诉我吗?

谢谢!

在WPF中绑定到一个数组

Tally是一个字段,需要作为公共属性。

(如果您想更改运行时,我也希望您知道INPC)

无论在静态方法中返回的本地集合还是在视图模型中返回的可观察集合中,您都没有在任何可观察集合中使用计数项。

Item应该只是一个域类型对象(带有一些自动getter和setter属性)。您应该创建一个服务并调用它ItemsRepository,它将返回IEnumerable<当您在存储库上调用>GetAll()时,Item>集合。如果可以的话,总是尽量避免使用任何Static,尤其是会返回一个集合的方法。