【问题标题】:Databinding Issue With Custom ObservableCollection Properties自定义 ObservableCollection 属性的数据绑定问题
【发布时间】:2010-07-28 17:35:29
【问题描述】:

我正在制作一个使用“信封”作为预算方法的小型个人理财计划。我主要这样做是为了学习 WPF 和 MVVM。我遇到了一个问题,我无法将数据绑定到我在自定义 ObservableCollection 中创建的自定义属性,请参见此处:

public class ObservableEnvelopeCollection : ObservableCollection<Envelope>
{
    public decimal Total
    {
        get
        {
            decimal total = 0;
            foreach (Envelope env in this)
            {
                total += env.Balance;
            }
            return total;
        }
    }

    public decimal SavingsTotal
    {
        get
        {
            blah blah. . .
        }
    }
}

我可以毫无问题地将我的数据网格数据绑定到集合,但是在我的数据网格下面我有标签,我需要显示集合中信封的余额总数。我可以将数据绑定到集合的 Count 属性,这是父 ObservableCollection 类的属性,但我无法从我的自定义类中数据绑定到 Total 或 SavingsTotal。

程序运行时标签是空白的,如果我使用 VS2010 设计器并转到标签内容的小数据绑定向导,它有“总计”下划线并显示工具提示:“路径项‘总计’不能解决。”同样,如果我将 Path 更改为 EnvColl.Count,它会起作用。

<Label Content="{Binding Path=EnvColl.Total}"/>

另外请注意,在我的 ViewModel 中,我可以毫无问题地访问我的集合中的 Total 和 SavingsTotal 属性,只是在 XAML/数据绑定中它不起作用。

【问题讨论】:

  • 您是否尝试过在 Binding 上使用 BindsDirectlyToSource=true?

标签: wpf mvvm binding observablecollection


【解决方案1】:

呸!我讨厌这样的事情发生...我去为每个肯特添加 BindsDirectlyToSource=true 并将其添加到错误的位置,从而导致构建错误。然后我删除它并重建,数据绑定突然开始工作。 . . :\ 我已经重建了几次解决方案,但没有成功,但是导致编译错误然后删除它使事情开始工作。想知道 2010 年的编译器是否有问题...?

【讨论】:

    【解决方案2】:

    vs2010

    (与往常一样,一些新用户可能需要了解此问题。)

    当我在调试模式下多次运行应用程序时发生这种情况,突然我不得不杀死它/停止调试器,然后我注意到它不知道何时必须重新编译代码。

    我注意到,如果我关闭并重新打开应用程序/解决方案,会很有帮助。如果你在调试模式下运行,你必须经常这样做。

    【讨论】:

      【解决方案3】:

      我知道这是几年前发布的,但我遇到了类似的问题,我有一个 Grid,其中包含一个 Label 和一个 DataGrid。我能够将DataGridItemsSource 设置为ObservableCollection,但我无法在Label 中访问所需的属性。所以我所做的是将包含GridDataContext 设置为ObservableCollection,然后我使用绑定的RelativeSource 属性来查找祖先(Grid)。语法看起来像这样:

      <Grid DataContext = "{Binding MyObservableCollection}">
          <Label Content = "{Binding MyDesiredProperty}"/>
          <DataGrid ItemsSource = "{Binding Path=DataContext, RelativeSource={RelativeSource Mode=FindAncestor, AncestoryType={x:Type Grid}}}">
          </DataGrid>
      </Grid>
      

      我认为这实现了原始海报所寻求的。希望如果不是,它可以帮助其他人。

      【讨论】:

        猜你喜欢
        • 2020-10-21
        • 1970-01-01
        • 1970-01-01
        • 2010-11-03
        • 1970-01-01
        • 1970-01-01
        • 2019-10-31
        • 1970-01-01
        • 2016-12-17
        相关资源
        最近更新 更多