我在 WPF 中有一个基本项目。
它所做的一切都是检索/更新产品。
如下图所示,用户输入一个ID,然后根据它显示数据,用户可以更改数据并单击“保存产品”将其保存到数据库中。
该GetProduct(int id)
函数通过提供的 ID 检索产品。
该SaveProduct()
函数保存更改的字段。
此外,还有两个 DataTemplate:
1) 对于 ProductModel - 包括 3 个文本框:ProductId、ProductName、UnitPrice。
2) 对于 ProductViewModel - 包括保存/获取按钮 + 一个文本框,供用户输入所需产品的 id。
我要做的是在用户单击“保存产品”按钮时获取更改的数据。
在我看来,最理想的方式是使用Binding
.
每个文本框都已绑定,但我不知道如何获取绑定数据。
以下是 FIRST DataType (ProductModel) 中绑定文本框的示例:
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding ProductId}" Margin="5" Width="150" />
以下每个属性都有一个ProductId
:ProductName
和UnitPrice
。
重要提示!:Get/SaveProduct()
函数在 中ProductViewModel class
,而实际的产品类别是 - 你猜对了 - ProductModel
。该类ProductViewModel
包含一个包含当前显示产品的变量。
这是用于保存信息的按钮 - 它以 SECOND DataType (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 页面中的所有“绑定标记”似乎都没有定义的源。可能是源实际上是包含绑定对象的
DataType
in吗?DataTemplate
SECOND DataTemplate(ProductViewModel 之一)有这个 ContentControl 标签:
<ContentControl Margin="10" Content="{Binding Path=CurrentProduct}" />
。
它的目的是什么?如果发生/确实发生了 TwoWay 绑定,我如何从
SaveProduct()
函数中获取值?我只是指,说CurrentProduct.ProductName
要改名吗?
非常感谢所有花时间回答的人 - 我非常感谢!