问题标签 [2-way-object-databinding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4653 浏览

c# - 自定义模板化 asp.net 控件的双向数据绑定

这个问题最初是关于让双向绑定工作的,但由于缺乏具体的答案和其他方面的进展,我一直在更新它 - 你可以检查编辑历史,但我认为这对明晰。

下面的代码清单允许将单个对象双向数据绑定到模板化控件。我想以最简单的方式扩展此示例,以允许为最根对象的复杂类型属性嵌套类似的支持双向数据绑定的模板化控件。例如,SampleFormData有一个属性List<string> Items。我希望能够在最根模板(来自此代码清单)中绑定到此列表,并在可编辑的文本框列表中显示字符串数据,也许,使用插入、删除、重新绑定输入的命令-changes(回到绑定对象的 List 属性)。此外,如果这是一个复杂类型的列表(SampleFormChildData,而不是字符串),一个新的嵌入SampleSpecificEntryForm可以在列表中使用,绑定到列表的每个项目,如中继器。依此类推,一直到叶简单属性,如果作者愿意的话。ui 字段不需要自动生成,仅可用于绑定。

注意: 的情况List<string>很特殊,因为即使是内置绑定也不能直接将字符串作为 DataItem 处理 - 直接将字符串作为列表中的项目绑定不是必需的,但肯定很有价值。

这与 a 不同,FormView因为它不是为期望绑定到项目列表中的一个而构建的,而只是绑定到视图状态中或任何地方持久存在的单个项目。与 FormView 不同,它只有一个类似于 FormView 的 EditTemplate 的默认模板。同样,绑定到类似集合的属性也只有一个视图 - 编辑。没有选择行然后编辑。一切都是可编辑的。目的是使双向绑定表单更易于构建。

在我看来,应该有两种绑定。 SingleEntityBindingCollectionBinding。 将单个对象实例SingleEntityBinding作为数据源(由 任何一种类型都应该支持任何一种类型的嵌套。列表操作,例如对支持对象数据的插入/更改/删除类型操作是表单作者的责任;然而,这种机制实施起来相对简单。SampleSpecificEntryFormCollectionBindingSingleEntityBindingDataSourceID="EntryForm1" DataMember="Items"DataList1

这是一些代码,希望对某人有所帮助。有 200 分可以为实现这一既定目标的最佳建议提供...

使用 ASP.NET 页面如下:

Default2.aspx.cs:

我也实现了 IDataSource,试图能够像这样嵌套一个列表组件(在 内):

关于如何以级联方式进行这项工作的任何想法都会很棒(例如,在 Items 列表属性上)。这里的挑战之一是 Bind() 不能引用数据绑定对象本身(在本例中为字符串),而是引用该项目的属性 - 使得绑定到列表很尴尬。

谢谢你的帮助!


一路上的发现

实现了 IDataItemContainer。我非常希望这会解决它,但没有。没有明显变化。 糟糕,在错误的类上实现了它。现在它是绑定,但值不会在回发时反弹到绑定对象。嗯……

正如本文所建议的那样,Page.GetDataItem() 是异常的来源。如果页面的 _dataBindingContext 为 null 或为空,则会引发此异常。文章确实解释了这一点,但没有说明如何确保填充 Page 的 _dataBindingContext。我会继续寻找。

正如 MSDN 文档所说,DataBoundControl 应该实现 PerformDataBinding 而不是覆盖 DataBind()。我已经这样做了,并且做了双向绑定工作。这段代码是必要的还是我应该使用内置的东西?

0 投票
1 回答
1369 浏览

silverlight - 从子窗口添加实体导致无法附加实体错误....为什么?

我在 Silverlight 中有一个订单详细信息表单,其中包含一个订单付款列表框。订单付款绑定到周围订单之外的它们自己的域数据源。我有一个按钮可以弹出一个 ChildWindow 控件来添加新的订单付款。订单付款具有与其关联的金额和付款方式。

表单加载正常,在下拉列表中显示数据表单中的所有付款方式以及金额的文本框。当我保存订单付款并尝试将其附加回订单详细信息 Order Payments 数据源时,我收到可怕的“无法附加实体,因为它已附加到另一个实体”错误。

这是 Add Order Payment 子窗口的 XAML:

这是添加订单付款屏幕的代码:

最后,这是尝试将新订单付款重新附加到订单详细信息屏幕的代码:

我是否遇到了这个问题,因为 Order Payment 上有一个绑定到不同数据上下文的属性?考虑到子对象必须从 RIA 服务加载对象才能保存,我什至可以以这种方式添加子对象吗?我是否应该以某种方式将域数据源从订单详细信息页面传递给子控件以拥有一个数据源?还是我必须恢复到在代码中进行克隆才能获得新对象?

0 投票
1 回答
1302 浏览

asp.net - .Net ObjectDataSource 错误:对象与目标类型不匹配

我的页面上有一个 ObjectDataSource,它在调用其 Insert 方法时产生错误“对象与目标类型不匹配”。从谷歌搜索这条消息,我相信这条消息是欺骗性的,我实际上在 ObjectDataSource 试图调用该方法的对象上得到一个空引用错误,但如果我能找出原因,我会很生气。

插入时调用的类型是 AddCommentPresenter。AddComment 方法不是静态的。如果我将其更改为静态,我不会收到错误,并且找到该方法没有问题。当它不是静态的时,就会发生错误。这就是为什么我认为根本问题是,当调用 AddComment 方法时,不知何故我没有获得我的 Presenter 类的有效实例。

我的 AddCommentPresenter 类没有无参数构造函数。这通常会导致错误。为了解决这个问题,我在页面的代码隐藏中覆盖了 ObjectCreating 事件并分配了 Presenter 类的实例。

protected void dsAddComment_ObjectCreating(object sender, ObjectDataSourceEventArgs e) { e.ObjectInstance = presenter; }

我可以逐步执行我的 ObjectCreating 方法,它是一个有效的、非空的 Presenter 实例,它被传递到 e.ObjectInstance 属性中。

我的 AddComment 方法具有正确的签名。

我还检查了一些明显的事情,比如在 aspx 页面上拼错了类型名称,但那里一切都是正确的。

有人有想法么?我必须说我发现 ObjectDataSource 类很难使用......

0 投票
1 回答
166 浏览

android - Android 将值从 UI 填充和设置到对象,反之亦然

我正在编写一个商业 Android 应用程序来进行调查,它还应该提供编辑调查的选项。在不编写显式逻辑的情况下将 UI 字段链接到数据库的最佳方法是什么。

0 投票
1 回答
4005 浏览

c# - c# 绑定到嵌套对象上的字段

对于如何使用数据绑定将 WinForms 应用程序中的控件绑定到嵌套对象,我似乎找不到简单、具体的解释。例如:

现在想象一个只有两个文本框的表单,第一个用于 Name,第二个用于 Inner.SomeValue。我可以很容易地绑定到 Name,但是 Inner.SomeValue 是不稳定的。如果我填充对象然后设置绑定,它会在文本框中显示 Inner.SomeValue 但我无法编辑它。如果我从一个新对象开始而不初始化 Inner,我似乎无法将数据粘贴到 Inner.SomeValue 中。

我查遍了 MSDN、StackOverflow 和几十个不同关键字的搜索。每个人都想谈论绑定到数据库或 DataGrids,并且大多数示例都是用 XAML 编写的。

更新:我已经尝试了 Marc 的完整测试工具并取得了部分成功。如果我点击“全部改变!” 按钮,我似乎能够写回内部对象。但是,从 MyObject.Inner null 开始,它不知道如何创建内部对象。我认为现在,我可以通过确保我的内部引用始终设置为有效对象来解决它。尽管如此,我还是忍不住觉得我错过了一些东西:)

0 投票
2 回答
31494 浏览

wpf - 如何使用 TwoWay 模式将 Listview SelectedItem 绑定到文本框?

我对 WPF 非常陌生,并且测试了一些我想包含在我将要处理的应用程序中的东西。我有一个 2 行 ListView(绑定到一个文本框),其中包含 Scott Guthrie 和 Jon Skeet 的名字。我正在尝试在 ListView 中选择“Scott Guthrie”并让它填充 TextBox。我希望能够编辑文本并关闭标签并更新 ListView。

编辑:我删除了代码,因为这确实没有为问题添加任何内容。

0 投票
1 回答
2362 浏览

asp.net - 什么是 ASP.NET 中的双向(2-way)数据绑定?

什么是 ASP.NET 中的 2 路数据绑定。听说Bind()是两种方式的数据绑定方式。

它与databinder.evalor有何不同Eval()

2 路数据绑定的优势是什么?在什么样的情况下应该使用 2 路数据绑定和使用Bind()而不是databinder.eval()

请详细讨论。

0 投票
2 回答
857 浏览

wpf - Wpf treeview selectedItem 数据绑定

我有一个视图,其中我有一个绑定到树视图的对象。该对象有许多集合(不同类型),所以我使用带有 CompositeCollection 的分层模板在树视图中显示它们。

然后我得到了一个绑定到树视图的 selectedItem 的文本框。在这里,我将 selectedItem 序列化为 XML 并将其显示在文本框中以进行编辑。

到目前为止一切都很好。但是,我遇到的最大问题是我不能将 2 路数据绑定与树视图的 SelectedItem 属性一起使用,因为它是只读的。

如何干净地保持文本框编辑与绑定到树视图的对象同步?

0 投票
1 回答
110 浏览

wpf - 为什么在这种情况下 DataBinding 反之亦然?

第一个具有所需的影响 - 更改文本框中的文本并且标签的内容发生变化,而第二个则没有。为什么?

0 投票
2 回答
487 浏览

wpf - 数据绑定问题 - DataTemplate/ViewModel/ICollectionView

最初我将此发布到 PRISM4 论坛,但有人建议我也应该尝试这个论坛:) 我正在使用 WPF4 BTW ...

我正在运行 PRISM4,我一直在努力让我的数据绑定工作。我遵循 MVVM 模式并有一个视图模型,它最初从 RDBMS 加载数据并将其包装在 ICollectionView 中。这非常有效,数据显示在绑定的 DatGrid 中,但我在尝试持久化对下面声明的 DataGrid 中呈现的数据所做的更改。

视图模型通过读/写属性“Results”发布 ICollectionView,如您所见,该属性具有“TwoWay”的绑定模式。我认为这足以保持对复选框状态所做的更改,但没有:(我已经尝试了多种方法来实现这一点,但复选框的状态不会传播回视图模型。我'我截获了对“PlotClicked”方法的调用,该方法是一个 ICommand 对象,但传递的参数具有未更改的“Plot”属性!当我单击其中一个列标题并对视图进行排序时,这一点尤其明显 - 选中的行是未选中,这是从数据库检索时复选框的默认状态。

我在这里做错了什么?

非常感谢 - 我真的被困在这里:( /Peter

...

我尝试了向我指出的建议。这就是我所做的:

  1. 在视图模型中,我将 Result 属性从 ICollectionView 更改为 OC

    公共 ObservableCollection 结果 { 获取;放; }

  2. 为构成视图的 UserControl 添加了以下模板资源

  3. 将以下代码添加到“列”部分的 DataGrid

    /li>

在进行了这些更改后,我在上面 (2) 中的 IsChecked="{Binding 中提到了 ... .

再次,非常感谢您在这里帮助我!

*更新* 现在我经历了一些非常可怕的事情:(这就是我所做的:

这在某种意义上是行不通的,即通过单击 DataGrid 中的复选框列永远无法将“绘图属性”设置为 true!现在我做了以下事情:

你可能会问结果?它有效,并且“绘图”设置正确!现在,我想,这很奇怪!所以我所做的是以下(简单地注释掉私有变量和获取/设置代码):

好的,结果呢?有用!!!???我惊呆了……我的意思是第一个和最后一个有什么区别????我对此感到非常尴尬 - 我的意思是我想知道这里的幕后发生了什么...... :(