【问题标题】:WPF binding to custom class with observable collectionWPF 绑定到具有可观察集合的自定义类
【发布时间】:2012-04-28 13:08:05
【问题描述】:

我正在寻找一些关于使用 ObervableCollection 绑定到自定义类的一般 WPF/C# 信息。我目前有一个与“BindingExpression 路径错误”有关的错误...“找不到属性”。任何指针都会很好。

【问题讨论】:

  • 请给我们看一些 XAML 和代码。
  • 可能是重复的。见这里:stackoverflow.com/questions/5382164/…
  • @dbaseman 感谢您的指点,我正在寻找更多关于它为何以这种方式工作的教程,即我没有发布任何代码,您添加的链接确实指向我正确的方向。

标签: c# wpf data-binding observablecollection


【解决方案1】:

听起来您还没有分配 DataContext。下面是一个简短的例子。

假设您的自定义类如下所示:

代码:

public class Foo
    {
         private ObservableCollection<string> _names;
         public ObservableCollection<string> Names 
         { 
             get{ return _names;} 
             set
             { 
                  _names = value;

             } 
         }
    }

你的 XAML 看起来像

XAML:

<ListBox Name="lstNames" ItemsSource="{Binding Names}"/>

在后面的代码中设置您的 DataContext。

lstNames.DataContext = new Foo(); 

这是一个非常简单的版本,可以满足您的需求。你真的应该看看Binding to Collections

【讨论】:

  • 这为我指明了正确的方向,但我仍在苦苦挣扎,感谢您的帮助
  • @MarkOates,WPF 使用 DataContext 来定位您尝试绑定的属性。例如,在上面的例子中,列表框知道它的 DataContext 是 Foo 的一个实例。列表框的绑定源是 Names(在 ItemsSource 中指定)。 WPF 然后知道去 Foo 然后遍历属性树以找到名为 Names 的属性。当它找到它时,它将订阅一个在 ObservableCollection 发生更改时引发的事件。
【解决方案2】:

可能会出现两个原因。首先 - 您在 xaml 上输入了错误的属性名称。第二 - 你忘了将DataContext 设置为你的View

【讨论】:

  • 或者他在代码隐藏中实例化绑定,在这种情况下最好使用Binding.Source来设置源。
猜你喜欢
  • 1970-01-01
  • 2013-05-21
  • 1970-01-01
  • 2020-12-29
  • 2015-03-07
  • 2016-11-08
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多