2013-06-03 69 views
0

我有一個名爲StockItem的類。
該類包含一些實例屬性,包括數量。
該類包含一些靜態屬性,包括Cart和CartTotalPrice。
購物車類型是ObservableCollection。
CartTotalPrice返回購物車總價。數據綁定到WPF中的靜態屬性

我創建了一個名爲UCOrder的UserControl,允許用戶將物品添加到購物車中。
我已經創建了另一個用戶控件,允許用戶更改購物車項目的數量。

我已經在UCOrder的標記中聲明瞭一個TextBlock。
我想將TextBlock綁定到靜態屬性StockItem.CartTotalPrice,以便TextBlock顯示當前的CartTotalPrice。
我該怎麼做?

任何幫助,將不勝感激

+2

我不明白CartTotalPrice和Cart如何可以是靜態的。 如果是,則表示所有StockItem對象都與同一個唯一的購物車關聯。你可以發佈這兩個類的代碼嗎? – Marshall777

+0

創建一個非靜態的observable屬性,它在內部使用靜態屬性並綁定到該屬性;正如Marshall777所指出的那樣,statis屬性通常是一個糟糕的主意。 – stijn

+0

@stijn你如何創建一個可觀察的屬性? – user1139666

回答

2
<TextBlock Text="{Binding Source={x:Static StockItem.CartTotalPrice}}"/> 

這聽起來有點古怪,但Source告訴我們,這是我們的結合,這通常是DataContext實際的來源,但我們塞提特使用我們的靜態屬性。有了路徑,我們現在可以在源對象上提供一個屬性,但是因爲我們已經擁有了我們想要的東西,所以我們不會設置默認爲「。」的路徑。意思是「直接採取來源」。

但請注意您的問題下的意見。雖然我只是回答你的問題,但我也認爲這樣做是一個壞主意,因爲已經提到過的原因。

+0

我知道Cart和CartTotalPrice不應該是靜態屬性,但我正在創建一個測試應用程序。正如你所描述的,我改變了我的TextBlock的聲明,但TextBlock不會自動刷新。例如,在用戶將物品添加到購物車後,TextBlock不會刷新。 – user1139666

+0

當然不是,這就是爲什麼我們都說它不是一個好主意。爲了更新,您需要實施INotifyPropertyChanged並提高每個屬性更改。但是這不適用於靜態屬性。另一個選項是通過[UpdateTarget](http://msdn.microsoft.com/en-us/library/system.windows.data.bindingexpression.updatetarget.aspx)手動提取更改。 – dowhilefor