我正在制作一个小型个人理财计划,使用“信封”作为预算方法。我大部分都是这样做,以此来学习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 /数据绑定中,它不起作用。
答案 0 :(得分:0)
呸!我讨厌这样的事情发生......我去肯特每次添加BindsDirectlyToSource = true并将其添加到错误的位置,导致构建错误。然后我将其移除并重建,数据绑定突然开始工作。 。 。 :\我已经多次重建解决方案而没有运气,但导致编译错误然后删除它使事情开始工作。想知道2010年的编译器是否有什么错误......?
答案 1 :(得分:0)
vs2010
(正如一些新成员可能需要了解这个问题。)
当我在调试模式下多次运行应用程序时突然发生这种情况,突然之间我必须将其删除/停止调试器,然后我注意到它不知道何时需要重新编译代码。
我注意到,如果我关闭并重新打开帮助很多的应用程序/解决方案。如果你在调试模式下运行,你必须经常这样做。
答案 2 :(得分:0)
我知道这是几年前发布的,但我遇到类似的问题,其中Grid
包含Label
和DataGrid
。我能够将ItemsSource
的{{1}}设置为DataGrid
,但我无法在ObservableCollection
中访问所需的属性。所以我所做的是将包含Label
的{{1}}设置为DataContext
,然后我使用绑定的Grid
属性来查找祖先({{1} })。语法看起来像这样:
ObservableCollection
我认为这可以达到原始海报的目的。希望如果没有,它可以帮助其他人。