C# 如何绑定到usercontrol.resources for Windows Phone 8.1(C)中的复杂对象

C# 如何绑定到usercontrol.resources for Windows Phone 8.1(C)中的复杂对象,c#,data-binding,windows-phone-8.1,C#,Data Binding,Windows Phone 8.1,在过去的几天里,我一直在网上搜索,但似乎找不到我认为很简单的东西。我想在我的windows phone应用程序的XAML页面中添加一个资源,它将引用一个复杂的对象,但我找不到正确的方法。这可能吗?对象由类似于以下内容的内容组成: Public class ComplexClass { Public string name { get; set; } Public int ID { get; set; } Public observablecollection<SimpleCl

在过去的几天里,我一直在网上搜索,但似乎找不到我认为很简单的东西。我想在我的windows phone应用程序的XAML页面中添加一个资源,它将引用一个复杂的对象,但我找不到正确的方法。这可能吗?对象由类似于以下内容的内容组成:

Public class ComplexClass
{
  Public string name { get; set; }
  Public int ID { get; set; }

  Public observablecollection<SimpleClass> simpleObjects { get; set; }

  Public addSimpleObject(SimpleClass newSimpleObject)
  {
    if (simpleObjects == null)
      simpleObjects = new ObservableCollection<SimpleClass>();

    simpleObjects.Add(newSimpleObject);
  }
}

Public Class SimpleClass
{
  Public String Name { get; set; }
  Public String Disc { get; set; }
}
你可以用它来实现这一点。已经有大量的教程可供您访问,以向您展示如何遵循此设计模式,因此我将不深入讨论

相反,我将向您展示一种将数据获取到视图中的简单方法

在UserControl或Page的构造函数或其他任何内容中,将DataContext设置为ComplexClass的实例:

ComplexClass complexClass;

public MyUserControl1()
{
    complexClass = new ComplexClass();
    complexClass.AddSimpleObject(new SimpleClass { Name = "Bob" });
    this.DataContext = complexClass;

    this.InitializeComponent();
}
然后在XAML中,您可以像这样绑定到它:


在不了解代码细节的情况下,我很难提出最适合您的方法。我读过MVVM和视图模型。

我不知道你的确切意思。是否要在页面的资源字典中声明ComplexClass的实例?是的,在参考资料中,这样我就可以在文本框中绑定到ComplexClass.name,在ListView中绑定到ComplexClass.SimpleObject。我认为您不应该通过参考资料这样做。通常情况下,视图模型中会公开一个ComplexClass实例。然后将页面的DataContext设置为视图模型实例,然后可以绑定到DataContext上的属性。这样,就可以从视图和视图模型访问ComplexClass实例。这有意义吗?如果你能编一些代码,我还没有用XAML编写那么多代码,我认为这是问题的一部分,不太擅长使用绑定的东西。谢谢你,我今晚下班后会检查它。我忘了说我试图使用CollectionViewSource并在代码中设置source属性,但这导致了一个值超出范围的错误,希望此datacontext选项可以工作。通常,如果您希望分组和/或跨多个ListView控件维护当前项,您只会使用CollectionViewSource。否则就没必要了。