当前位置: 首页 > 知识库问答 >
问题:

多绑定不更新源属性和数据库

金旺
2023-03-14

我正在使用带有wpf和Entity框架的mvvm模式,并在视图模型和模型中实现了INotifyProperty tyChanged

我使用带有3个文本框控件的多绑定,第一个文本框用于输入名字,第二个文本框用于姓氏

第三个文本框表示全名

使用多重绑定的第三个文本框:

 <TextBox >
   <TextBox.Text>
        <MultiBinding Converter="{StaticResource FullNameConverter}">
                            <Binding Path="PersonData.FullName" Mode="TwoWay"         ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged"/>

                            <Binding ElementName="FirstNameTextBox"  Path="Text" Mode="TwoWay"       UpdateSourceTrigger="PropertyChanged" />
                            <Binding ElementName="LastNameTextBox" Path="Text"    Mode="TwoWay"     UpdateSourceTrigger="PropertyChanged"/>

                       </MultiBinding>
                    </TextBox.Text>
                </TextBox>

这是我的转换器

public class FullNameConverter : IMultiValueConverter
{

    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return string.Format("{0} {1}", values[1], values[2]);
      }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        return new[] { value };  
      }
}

这可以完美地工作并将FirstName和LastName保存到数据库,但不会将FullName保存到具有多绑定的数据库。

但当直接在全名文本框中输入时,将数据保存到数据库

如何解决这个问题?请帮帮我谢谢

共有2个答案

裴理
2023-03-14

谢里丹全名实际上是名字和姓氏的别名。示例:如果名字是Lionel,姓氏是Mesi,则多绑定全名=Lionel Mesi,但有时我想将全名更改为自定义Nmae,示例:Lionel Mesi更改为Lio

蓝逸仙
2023-03-14

多重绑定并不像你想象的那样工作。您不能使用它来创建要保存在数据库中的新值。它们只能用于创建要在UI中显示的新值。如果您想创建一个新值来保存在数据库中,那么您需要在代码中为其创建属性。。。也许是这样

public string Fullname
{
    get { return string.Format("{0} {1}", FirstName, LastName); }
}

当然,要做到这一点,您还需要有名为FirstName和LastName的属性,它们是绑定到前两个文本框的数据,但无论如何,您都应该这样做。在这种情况下,还应将此聚合属性数据绑定到第三个文本框。UI中的文本属性:

<TextBox Text="{Binding FullName}" />

请阅读MSDN上的数据绑定概述页面,了解有关如何编写WPF代码的更多信息。

 类似资料:
  • 我想通过使用@ConfigurationProperties注释将我的Application.Properties自动绑定到一个类中。首先,我尝试了@value注释,并能够将属性值注入类变量。但是,@ConfigurationProperties没有将属性注入到值中。 我的应用程序.属性: application.java ConfigBinder.java 输出: 这样的执行到底出了什么问题?

  • 问题内容: 我正在用C#编写Winforms应用程序,该应用程序使用户可以使用datagridview编辑和更新数据库。 问题是,我无法使其正常工作。我唯一要实现的就是更新datagridview所显示的内容,但是当我进入数据库表时,数据没有任何变化。我搜索了很多讨论该问题的站点,但对我来说仍然没有任何用处。 到目前为止我尝试过的事情: 将数据库绑定到datagridview 将属性更改为 使用带

  • 问题内容: 我有一个带有文本字段和按钮的简单fxml。如果文本字段为空,我想禁用按钮。所以我在控制器中插入如下内容: ..那很好。问题是当我添加第二个文本字段时,如果其中一个文本字段为空,希望禁用我的按钮。那该怎么办?我尝试了以下操作,但这不起作用: 问题答案: 可以通过以下方式绑定到布尔表达式:

  • 我有一个带有文本字段和按钮的简单fxml。如果文本字段为空,我想禁用按钮。所以我在我的控制器中插入如下内容: ..这很好用。问题是,当我添加第二个文本字段时,如果其中一个文本字段为空,我希望禁用我的按钮。那怎么办呢?我尝试了以下方法,但不起作用:

  • javafx属性是将数据模型连接到javafx gui的好方法,因为它们的绑定模型实现了强大的通知更新机制。 属性和绑定并不严格地与GUI相关,而是对JavaBeans的扩展。 因此,我们希望在应用程序模型类中使用它们,而不引入对包的依赖关系,并且通常来自. 换句话说:(update) 我可能需要将应用程序分成两个模块。 一个模块应该只包含操作数据的类(模型类,说MVC)。 第二个模块将包含所有图

  • 假设我有一个非常大的单元格网格,我想添加数据行和数据集合值,并从模型绑定。如何从angular2(Dart中的beta0)绑定数据行。 绑定的数据行= " {{boundVal}}”似乎并不 例如。