自定义ObservableCollection属性的数据绑定问题

时间:2010-07-28 17:35:29

标签: wpf mvvm binding observablecollection

我正在制作一个小型个人理财计划,使用“信封”作为预算方法。我大部分都是这样做,以此来学习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设计器并转到标签内容的小数据绑定向导,它会有“全部”下划线并显示工具提示:“路径项'总计'不能是解决。”同样,如果我将路径更改为EnvColl.Count,则可以正常工作。

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

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

vs2010

(正如一些新成员可能需要了解这个问题。)

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

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

答案 2 :(得分:0)

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

ObservableCollection

我认为这可以达到原始海报的目的。希望如果没有,它可以帮助其他人。