我在WPF中有一個基本項目。
所有它檢索/更新產品。使用WPF/C中的綁定獲取更改的數據#
如下面圖所示,用戶輸入的ID,然後將數據根據它顯示,並且用戶能夠改變數據和點擊「保存產品」將其保存到該數據庫。
的GetProduct(int id)
功能所提供的ID檢索的產物。
SaveProduct()
函數保存更改的字段。
此外,還有兩個DataTemplates:
1)對於ProductModel - 包括3個文本框:ProductId,ProductName,UnitPrice。
2)對於ProductViewModel - 包括保存/獲取按鈕+一個用於用戶輸入的所需產物的id文本框。
我想要做的就是改變的數據,當用戶點擊「保存產品」按鈕。
在我看來,最理想的方式是使用Binding
。
每個文本框都已綁定,但我不知道如何獲取綁定的數據。
下面是在第一數據類型(產品型號)一個綁定文本框的一個示例:
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding ProductId}" Margin="5" Width="150" />
有一個用於每個以下屬性:ProductId
,ProductName
和UnitPrice
。
重要!:的Get/SaveProduct()
功能在ProductViewModel class
,而實際產品類 - 你猜對了 - ProductModel
。 ProductViewModel
類包含一個包含當前顯示的產品的變量。
這個標題是指用於保存信息的按鈕 - 這是寫在第二數據類型(ProductViewModel):
<Button Content="Save Product" DockPanel.Dock="Right" Margin="10,2" VerticalAlignment="Center" Command="{Binding Path=SaveProductCommand}" Width="100" />
的SaveProductCommand
命令只是觸發的SaveProduct()
功能。
我有一個關於這個整個主題幾個問題:
是什麼意思時,使用這樣的綁定:
{Binding ProductId}
?默認爲文本框結合模式是雙向據我記得。但是在這種情況下,ProductId/Name + UnitPrice不是依賴項屬性,因此當文本框中的文本發生更改時,綁定值不會更新/發回。 (因爲沒有附加的事件...)
數據上下文從未在我的項目中配置,但我的XAML頁面中的所有「綁定標記」似乎沒有定義資源。難道它的來源實際上是
DataTemplate
中的DataType
,它包含綁定的對象?SECOND DataTemplate(ProductViewModel之一)具有此ContentControl標記:
<ContentControl Margin="10" Content="{Binding Path=CurrentProduct}" />
。
這是什麼目的?如果發生雙向綁定,我如何從
SaveProduct()
函數中獲取值?我只是指CurrentProduct.ProductName
來獲取更改的名稱嗎?
非常感謝大家花時間回答 - 我非常感謝!
對不起,我剛剛發現'DataContext'已被設置。它被設置爲包含'CurrentProduct'的'ProductViewModel'的一個實例。它就像你說的那樣工作! :)我仍然有一個小問題,雖然...根據你解釋它的使用情況,{Binding ProductId}不等於{Binding Path = ProductId} – Asaf
是的,但是'路徑'是隱含的,因此它不是_explicitly_需要的。 –
好的...和'CurrentControl' ...我得到它保存了'CurrentProduct'對象,因爲它的內容,但它會發生什麼?它在用戶界面中也不可見... – Asaf