gpt4 book ai didi

silverlight - 带有 ObservableCollections 的 ObservableCollection 无法正确呈现

转载 作者:行者123 更新时间:2023-12-03 10:18:47 26 4
gpt4 key购买 nike

我对 Silverlight 体验相对较新,我正在尝试创建一个带有 DomainService 的 MVVM 应用程序,该应用程序将 POCO 作为模型返回。我有一个 UserControl,它有一个 TreeView,其 ItemsSource 设置为绑定(bind)到一个 ObservableCollection 类型,该类型具有 ObservableCollection 作为其属性之一,并且该集合属于具有 ObservableCollection 属性的类型。所以我使用 HierarchicalDataTemplate 作为带有 TextBlocks 的 TreeView 的 ItemTemplate 来呈现每个项目的 Name 属性。我将在下面包含一些代码。

所以类将是这样的:

public class A
{
public int ID { get; set; }
public string Name { get; set; }
public ObservableCollection<B> Bs { get; set; }
}

public class B
{
public int ID { get; set; }
public string Name { get; set; }
public ObservableCollection<C> Cs { get; set; }
}

public class C
{
public int ID { get; set; }
public string Name { get; set; }
}

基本上,我的集合是从 DataRepository 中填充的,该方法使用获取 A、B 和 C 列表的方法。通过 foreach 循环使用 LINQ 适本地添加每个实例。并返回一个列表。该方法正常工作,因为我从 default.aspx.cs 调用它并逐步确认所有数据都已正确添加。

但我的问题是,当它在屏幕上呈现时,没有一个集合是正确的。例如,“A”的“B”子集合的第一项应该有超过 4000 的计数,但没有显示。然而,应该在第一个“A”的集合“Bs”中的“B”的第一个项目显示为“A”的第二个项目。

(应该是什么的例子)
  • a1
  • b1.1
  • c1.1.1
  • c1.1.2
  • c1.1.3
  • b1.2
  • c1.2.1
  • c1.2.2
  • a2
  • b2.4
  • c2.4.1
  • c2.4.2
  • c2.4.3
  • a3
  • b3.6
  • c3.6.1
  • c3.6.2
  • c3.6.3
  • a4
  • b4.8
  • c4.8.1
  • c4.8.2
  • c4.8.3

  • (显示的示例)
  • 一个
  • a2
  • b2.2
  • c2.2.2
  • a3
  • a4
  • b4.4
  • c4.4.4

  • 经过一番调查,我看到的唯一模式是层次结构基于相同的 ID。

    以下是代码示例:

    (DataContext 由 UserControl 资源设置)
    <sdk:TreeView ItemsSource="{Binding Path=As}" >
    <sdk:TreeView.ItemTemplate>`
    <sdk:HierarchicalDataTemplate ItemsSource="{Binding Path=Bs}">
    <TextBlock Text="{Binding Path=Name}" />
    <sdk:HierarchicalDataTemplate.ItemTemplate>
    <sdk:HierarchicalDataTemplate ItemsSource="{Binding Path=Cs}">
    <TextBlock Text="{Binding Path=Name}" />
    <sdk:HierarchicalDataTemplate.ItemTemplate>
    <sdk:HierarchicalDataTemplate ItemsSource="{Binding}">
    <TextBlock Text="{Binding Path=Name}" />
    </sdk:HierarchicalDataTemplate>
    </sdk:HierarchicalDataTemplate.ItemTemplate>
    </sdk:HierarchicalDataTemplate>
    </sdk:HierarchicalDataTemplate.ItemTemplate>
    </sdk:HierarchicalDataTemplate>
    </sdk:TreeView.ItemTemplate>
    </sdk:TreeView>

    查看型号
    public class myViewModel
    {
    private myDomainContext context = new myDomainContext();

    public ObservableCollection<A> As
    {
    get
    {
    LoadOperation<A> loadOp = context.Load(context.GetAsQuery());
    return new ObservableCollection<A>(loadOp.Entities);
    }
    }
    }

    对于这个问题的长度,我深表歉意,我希望不要如此含糊,并获得一些有用的建议。这个问题已经困扰我几天了,我已经准备好继续前进了。请帮助我摆脱困境。提前致谢。如果您有任何对我的 MVVM 知识有帮助的好的链接,我也将不胜感激。

    我的环境是:
    - ASP.NET 4
    - 银光 4
    - Visual Studio 2010

    最佳答案

    我的印象是 HierarchicalDataTemplate 是分层使用的 :) 也就是说,您只使用一个,它递归地适用于任何 child 。

    这确实意味着数据键必须相关并且数据统一(相同类型)。

    您上面描述的模板基本上是相互嵌套 3 个模板,因此您将获得每个显示的第一条记录(其中有子数据)。

    关于silverlight - 带有 ObservableCollections 的 ObservableCollection 无法正确呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3865759/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com