【发布时间】:2011-11-23 04:47:40
【问题描述】:
在下面的窗口中,现有报告组合绑定到一个可观察的报告对象集合。我有一个 reportObject 属性currentReport 绑定到组合的 SelectedValue 属性 OneWay。但是,这在 XAML 中绑定时不起作用。
SelectedValue="{Binding currentReport, Mode=OneWay}"
TwoWay 可以很好地绑定,但是如果不向 reportObject 类写入 undo() 方法,我就无法做到这一点。我将 currentReport 的属性绑定到各种文本框以进行编辑。我想绑定 OneWay,这样源就不会改变。 currentReport 的所有属性都绑定到相应的文本框,因此当我在 SQL [保存] 中更新表时,它将从该对象中提取,谁的数据是最新的。
<TextBox Text="{Binding currentReport.reportName, Mode=TwoWay}"
从 currentReport 绑定到文本框的所有属性也可以正常工作。唯一的问题是从 SelectedValue 到 currentReport 对象的 OneWay 绑定。有谁知道如何让它发挥作用?我看到有一个bug,但是我看到的帖子是2009年的。
对黄色感到抱歉。不是我的主意。 =)
编辑:添加此 XAML 以防万一。
<ComboBox ItemsSource="{Binding reportsCollection}" SelectionChanged="cboReports_SelectionChanged"
DisplayMemberPath="displayName"
SelectedValue="{Binding currentReport, Mode=TwoWay}"
x:Name="cboReports" Width="342" Height="40" VerticalAlignment="Center"/>
【问题讨论】:
-
OneWay 仅在源属性更改时更新目标属性。当目标属性更改时,OneWayToSource 会更新源属性。但是,如果您将文本框绑定到 currentReports 属性,那么您实际上会更改报告属性,您如何将它绑定到您的组合框并不重要,还是我读错了什么?
-
老兄,如果不是 TwoWay,您希望如何选择不同的现有报告?
-
@BigL & BalamBalam 我真正需要的只是当用户从组合中选择某些内容时将 currentReport 设置为 SelectedValue。不过,我不希望更改 currentReport 来更改基础集合。我想在用户保存时合并这些更改。 currentReport 只是一个用于通过文本框进行编辑的临时对象。有道理?如果我将 SelectedValue 双向绑定到 currentReport,则对 currentReport 进行更改会更改集合。如果我这样做,我必须编写一个 undo() 方法并将 reportObject 的变量计数加倍以保持原始值直到保存。
-
我可以在代码中完成,但如果可能的话我更喜欢使用绑定
-
因此,如果您在组合框中的选择发生变化,您总是会在您绑定到的属性的设置器中创建一个新的临时 currentReport 对象。然后设置临时属性,如果用户单击保存,则将其合并到数据库中。但是你仍然需要临时对象,所以你的集合永远不会改变?
标签: wpf xaml binding combobox selectedvalue