2009-09-30 40 views
1

我有一個簡單的屬性在我的視圖模型是字符串類型。我想將它綁定到文本框,以便更改文本框更新字符串並更改字符串更新文本框。我是否真的有一個圍繞實現INotifyPropertyChanged的字符串類型編寫一個包裝類,還是我在這裏丟失了一些令人難以置信的簡單東西?wpf databinding - 與字符串的雙向綁定?

回答

2

實現INotifyPropertyChanged非常簡單。但是我會做什麼,ViewModel類幾乎總是(如果不是總是)從DependencyObject繼承;我會做這個文本屬性一個DependencyProperty,它會自動通知更改,無論它綁定。您可以在C#中使用propdp快捷方式(在Visual Studio 2008中,不確定是否也是2005)來更快地創建DependencyProperty,只需鍵入propdp並按兩次Tab鍵即可。它看起來像這樣:

public string SomeText 
    { 
     get { return (string)GetValue(SomeTextProperty); } 
     set { SetValue(SomeTextProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for SomeText. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty SomeTextProperty = 
     DependencyProperty.Register("SomeText", typeof(string), typeof(YourClassName), new UIPropertyMetadata(String.Empty)); 
+0

我們是不是通過從依賴對象中派生ViewModel類而使它變得沉重? – Trainee4Life 2009-09-30 18:35:15

+0

可能,但有好處。我沒有事實告訴你他們應該總是從DependencyObject派生出來,但我已經在許多文章中閱讀過它,並在許多視頻中聽到過,例如blog.lab49.com/archives/2650 Jason Dolinger Intro to MVVM模式。這聽起來很正確,因爲VM類將控制窗口的所有方面(狀態,動畫,綁定)。 – Carlo 2009-09-30 18:59:34

+1

我也看到了MVVM的JD介紹,並發現它是迄今爲止在WPF上見過的最豐富的截屏視頻。這就是我現在使用MVVM模式的唯一原因,而不是使用內聯winforms編碼風格來攻擊程序。我不確定重量依賴對象帶來了什麼,但它看起來是一個相當自然的基類,給出了視圖模型應該服務的目的。 – Chris 2009-09-30 21:09:48

1
+0

我給了Carlo答案,因爲他稍微更冗長,但也給你評分。謝謝! – Chris 2009-09-30 21:04:56

2

實際上,你不必圍繞字符串類型做一個包裝類。 INotifyPropertyChanged將針對每個ViewModel類實現。該接口需要向綁定框架發送有關更改數據的通知。

我建議您訪問http://mvvmfoundation.codeplex.com/並將MVVM基礎類整合到您的WPF項目中。 MVVM基礎提供了一組基本的可重用類,每個人都應該使用。儘管還有像Cinch,Onyx等其他廣泛的WPF框架,但可以使用。