C# 在WPF/C中使用绑定获取更改的数据#
我有一个WPF的基本项目。C# 在WPF/C中使用绑定获取更改的数据#,c#,wpf,xaml,data-binding,mvvm,C#,Wpf,Xaml,Data Binding,Mvvm,我有一个WPF的基本项目。 它所做的一切都是检索/更新产品 如下图所示,用户输入ID,然后根据ID显示数据,用户可以更改数据并单击“保存产品”将其保存到数据库中 GetProduct(int-id)函数根据提供的id检索产品。 SaveProduct()函数保存更改的字段 此外,还有两个数据模板: 1) 对于ProductModel-包括3个文本框:ProductId、ProductName、单价。 2) 对于ProductViewModel-包括保存/获取按钮+一个文本框,供用户输入所需产品
它所做的一切都是检索/更新产品 如下图所示,用户输入ID,然后根据ID显示数据,用户可以更改数据并单击“保存产品”将其保存到数据库中
GetProduct(int-id)
函数根据提供的id检索产品。SaveProduct()
函数保存更改的字段
此外,还有两个数据模板:1) 对于ProductModel-包括3个文本框:ProductId、ProductName、单价。
2) 对于ProductViewModel-包括保存/获取按钮+一个文本框,供用户输入所需产品的id 我试图做的是在用户单击“保存产品”按钮时获取更改的数据 在我看来,最理想的方法是使用
绑定
每个文本框都已绑定,但我不知道如何获取绑定的数据
下面是第一个数据类型(ProductModel)中绑定文本框的示例:
以下属性各有一个:ProductId
、ProductName
和UnitPrice
重要!:Get/SaveProduct()
函数位于ProductViewModel类中,而实际的产品类是-你猜到了-ProductModel
。ProductViewModel
类包含一个变量,该变量包含当前显示的产品
这是用于保存信息的按钮-写入第二个数据类型(ProductViewModel):
SaveProductCommand
命令仅启动SaveProduct()
函数
关于整个主题,我有几个问题:
像这样使用绑定是什么意思:{binding ProductId}
据我记忆所及,文本框的默认绑定模式是双向的。但是在这种情况下,ProductId/Name+UnitPrice不是依赖属性,因此当文本框中的文本发生更改时,绑定的值不更新/发回是正确的吗?(因为没有附加任何事件…)
我的项目中从未配置过数据上下文,但我的XAML页面中的所有“绑定标记”似乎都没有定义的源。是否源实际上是包含绑定对象的DataTemplate
中的DataType
第二个数据模板(ProductViewModel 1)具有以下ContentControl标记:
它的目的是什么
如果发生了双向绑定,如何从SaveProduct()
函数中获取值?我是否只需引用,比如说CurrentProduct.ProductName
,就可以获得更改后的名称
非常感谢所有花时间回答问题的人——我非常感谢
当像这样使用绑定时,它意味着什么:{binding
ProductId}
设置了此绑定的特定控件属性将在对象集上查找ProductId
属性作为DataContext
,并相应地设置控件中的propertys值
据我记忆所及,文本框的默认绑定模式是双向的。
但在本例中,ProductId/Name+UnitPrice不是依赖项
属性,因此绑定的值不存在是否正确
文本框中的文本更改时是否更新/发回?(自
没有附加到它的事件…)
要进行双向绑定,不需要将对象中的属性设置为dependencProperty
我的项目中从未配置数据上下文,但所有
我的XAML页面中的“绑定标签”似乎没有定义的源。
是否源实际上是数据库中的数据类型
包含绑定对象的数据模板
在XAML中设置的绑定将使用存储在DataContext
中的对象,因此如果未显式设置视图的DataContext
,则该对象将为空。但是,您应该注意,DataContext
是从其父级继承的。如果您实际上是通过使用(例如,CurrentProduct
)来设置内容,那么所有属性都可以根据您的Product
类型进行绑定
第二个DataTemplate(ProductViewModel 1)具有以下特性
ContentControl标记:
它的目的是什么
它充当您的CurrentProduct
的容器,该容器可以包含且只能包含一个项目
如果发生了双向绑定,如何从中获取值
在SaveProduct()函数中?我只是指,说
CurrentProduct.ProductName是否获取更改的名称
在没有看到整个应用程序的情况下,我猜测ContentControl
被设置为CurrentProduct
和您的文本框
,等等。。都绑定到各自的属性,例如CurrentProduct.ProductId
等。。。您要保存的产品实际上是CurrentProduct
。在ViewModel中调用save时,只需访问CurrentProduct
并根据需要保存它,其中CurrentProduct.PropertyName
将包含从UI传播的更改
当像这样使用绑定时,它意味着什么:{binding
ProductId}
设置了此绑定的特定控件属性将在对象集上查找ProductId
属性作为DataContext
,并相应地设置控件中的propertys值
据我记忆所及,文本框的默认绑定模式是双向的。
但在本例中,ProductId/Name+单价不是dependenc
<ContentControl Margin="10" Content="{Binding Path=CurrentProduct}" />