2011-09-01 78 views
1

花了一天的时间试图找到我的问题的答案,我终于会问这个问题。 :)新手WPF绑定问题

通过阅读MSDN手册页我发现我终于可以删除那些漫游表单填充过程,并将每个字段(TextBox,CheckBox等)连接到我选择的任何属性。

我有一个名为ArticleItem的类来处理这种情况下的所有数据。

VB代码:

Public ArtItem as New ArticleItem 

    Private Sub LookUpArt() 
    If txtArtNo.Text.Length > 0 then 
     ArtItem.Load(txtArtNo.Text) 
    End If 
    End Sub 

XAML:

<Page DataContext="{Binding RelativeSource={RelativeSource Self}}"> 

<!-- ... --> 

<TextBox x:Name="txtDescr" Text="{Binding ArtItem, Path=Descr}" /> 

现在我没有问题填充列表框,但我没有得到我的文本框任何反应。
我错过了什么?

回答

5

ArtItem是一个字段,您不能将字段绑定到公共属性。此外,如果它在初始化后更改,则需要implementINotifyPropertyChanged,否则绑定将不会更新。

编辑:你结合被打破,以及,你设置的路径两次,它应该是{Binding ArtItem.Descr}{Binding Path=ArtItem.Descr}这是相同的,Descr也需要一个公共财产和ArtItem也需要实现接口。

+0

@Jonas:我发现了另一个问题。 –

+0

好吧,我给了它另一个镜头。 我的课程现在实现INotifyPropertyChanged接口,ArtiItem已经成为一个私人实例('Private _ArtItem as New ArticleItem'),并创建了一个名为'ArtItem'的公共属性来返回值。 Descr属性也会在更改时引发'PropertyChanged'事件。 XAML也更新为'Text =“{Binding ArtItem.Descr}”'但文本框仍为空... – Jonas

+0

因此,这两个类都实现了接口,并且通过“ArtItem.Descr”路径绑定的两个属性都是公共的,提高二传手的相关事件?如果是这样,这应该工作,因为'ArtItem'是您的页面上的一个属性,它已在DataContext中设置,并且DataContext被继承到TextBox。可能还有其他我现在无法想到的要求。尝试[调试绑定](http://blogs.msdn.com/b/wpfsldesigner/archive/2010/06/30/debugging-data-bindings-in-a-wpf-or-silverlight-application.aspx)如果您失败,请发布完整的代码。 –