我在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