2011-09-01 116 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)如果您失敗,請發佈完整的代碼。 –