C# 在WPF/C中使用绑定获取更改的数据#

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-包括保存/获取按钮+一个文本框,供用户输入所需产品

我有一个WPF的基本项目。
它所做的一切都是检索/更新产品

如下图所示,用户输入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}" />