2011-04-04 77 views
0

我在WPF 4和VB.net 2010中有一個項目。我想將mediaelement的volume屬性綁定到另一個模塊中的變量。請注意,變量是正確的數據類型,所以不需要轉換。我該怎麼做呢?將數據綁定WPF屬性到變量

+0

你能再給我們幾個細節嗎?一般來說,UI組件綁定到名爲ViewModel的類,該類是UI的抽象。此ViewModel包含與UI屬性綁定的變量(例如Volume)。 ViewModel可以是任何地方的一個類,甚至可以來自另一個模塊(如果你在這裏說的是CAL模塊)。然而,如果它是一個隨機類的隨機變量,那麼你可能會想要創建一個新的ViewModel類,然後在你的其他類的變量周圍執行getter + setter組合,並實現INotifyProperty的更改。 – 2011-04-04 02:02:40

+0

哈哈,我還沒有足夠的技巧來操作那麼複雜。該媒體元素位於WPF頁面中,該變量位於公共範圍的vb.net模塊中(該變量也是公共範圍)。所以,getter + setter組合可能是最好的選擇。我會怎麼做? (請在回答中回答,所以我可以對你的看法,如果它的工作:) – CodeMouse92 2011-04-04 02:15:20

+0

我需要知道更多的一塊,以便有人可以回答:你目前如何支持你的觀點與數據? WPF允許您像在WinForms中一樣放置代碼,或者可以將數據類型(ViewModel類類型)綁定到特定的View。 – 2011-04-04 03:11:10

回答

2

首先,確保您的代碼實現INotifyPropertyChanged。

這裏舉例:http://www.codekeep.net/snippets/4c7ed2e5-7e3b-40b4-b976-d54b54d9bf5b.aspx

所有這一切是一種方式來通知已經改變,對於音量值的UI,它需要搶在結合新的價值。

第二件事是你需要以某種方式從代碼中的其他模塊訪問變量,然後在你的代碼中使用Property來引用它。這裏的屬性的例子,如果你不熟悉的:

http://www.xtremevbtalk.com/showthread.php?p=688701

現在的訣竅是,當你設置的財產,你要還致電通知屬性更改事件。

Public Property Volume() 
    Get 
    Volume() = YourModuleVolume 
    End Get 

    Set(ByVal Value) 
    YourModuleVolume = Value 
      'Call NotifyPropertyChanged("Volume") here 
    End Set 
End Property 

我不記得,如果背後類的代碼自動將自己設置爲DataContext的用戶控件,所以你可能要在「this.DataContext =本」或VB.NET等同於放棄你構造函數。通常DataContext是從你的ViewModel自動獲取的。基本上說,使用指定的類(即後面的代碼)作爲所有數據綁定的來源。

然後在XAML這是一個通常的數據綁定。

<YourControl Volume="{Binding Volume}" /> 

作爲一個方面說明,這實在不是一個怎樣通常會關於建立一個WPF應用程序,所以此方案是一個有點古怪。如果你打算用WPF做很多事情,你可能需要研究MVVM上的Josh Smith的資源 - 這實際上是WPF應用程序的預期架構。

祝你好運!