2012-07-23 146 views
8

比方說,我在屏幕上的「當前記錄」編輯區域..所以我的視圖模型有一個類與所有當前編輯的屬性,如:綁定到ViewModel.SubClass.Property(子屬性)

class Record { 
    public string Notes { get { return "Foo"; } set { _notes = value; Notify("Notes"); } 
} 

,我們這個類添加到視圖模型:在我看來

class AdjustsmentViewModel { 
    public Record CurrentRecord { get { return new Record(); }} 
} 

我如何可以綁定到CurrentRecord的Notes屬性?我試過這個:

<TextBox Text="{Binding CurrentRecord.Notes, Mode=TwoWay}" VerticalScrollBarVisibility="Auto" TextWrapping="WrapWithOverflow" AcceptsReturn="True" /> 

但是這不起作用。我也試着設置周圍的StackPanel的DataContext的:

<StackPanel DataContext="{Binding CurrentRecord}"> 

在那之後,我想在我的文本框{結合注}和{綁定路徑=注},但這些都不似乎工作。

也許上面真的應該工作,我在別的地方搞點什麼?

更新

這在用戶控件發生。這個用戶控件有一個獨立的視圖模型,從它的父窗口。

this.DataContext = UnityUtil.Resolve<AdjustmentsViewModel>(); 

而且我看到一個綁定錯誤:在「對象」「」 MainViewModel」

是查看模式設置在主窗口中沒有發現「注意」屬性。

爲了驗證我有正確的視圖模型的約束,我只是直接對視圖模型中添加這個屬性:

public string Notes2 { get { return "Bar"; } } 

和相應的文本塊中的觀點:

<TextBlock Text="{Binding Path=Notes2}" /> 

此按預期工作。

巨大成功

感謝瑞安,我能發現問題。這不是屬性本身,而是CurrentRecord的設置方式。在我的setter中,我調用了INotifyPropertyChange處理程序,但它的屬性的舊名稱。因此,有觀點沒有得到CurrentRecord通知,所以我想說明的通知是不夠的..

總之

,這個符號是正確的:{綁定路徑= CurrentRecord.Notes}

+0

你得到的錯誤是什麼? – Thelonias 2012-07-23 20:14:06

+0

沒有錯誤。我只是沒有看到文本框中的值(我的默認Foo字符串) – 2012-07-23 20:19:20

+0

什麼是您的視圖...窗口,用戶控件,數據模板?你如何將視圖的datacontext設置爲視圖模型對象? – Thelonias 2012-07-23 20:30:37

回答

8

以上應該工作,{綁定路徑= CurrentRecord.Notes}是正確的。你可以檢查你的datacontext設置爲你的viewmodel嗎?

還檢查您的視圖模型是否實現INotifyPropertyChanged。

編輯: 我剛剛創建了一個示例項目來重新創建它。不需要實現INotifyPropertyChanged,它只是在將datacontext設置爲VM時才起作用。

+0

我還沒有嘗試過這種特殊的綁定之前,但它仍然似乎沒有工作.. – 2012-07-23 20:18:18

+0

@SonicSoul究竟是什麼工作......你的筆記裏面的記錄沒有顯示在您的文本框或何時你輸入文本框,他們不會去你的記錄的筆記...或兩者?在輸出窗口中是否有任何錯誤...就像一個綁定錯誤? – Thelonias 2012-07-23 20:19:44

+0

都不起作用。我默認我的字符串爲Foo。沒有出現。如果我在文本框中鍵入一些其他值,然後按一個按鈕來查看調試器..該屬性中仍然有「Foo」,所以它不受影響,或者顯示..沒有看到任何相關的錯誤輸出 – 2012-07-23 20:24:05

1

確保您的CurrentRecord屬性爲1),並且2)通知UI層已發生更改。