我创建了一个报表控件,该控件接受一组绑定到基础对象的参数,并使用数据模板选择器生成控件。
<local:ReportControl Grid.Row="1" Grid.ColumnSpan="2">
<local:ReportControl.Parameters>
<local:ReportParameter Label="Combo Box" ItemsSource="{Binding ItemsSource}" Value="{Binding [value]}"/>
<local:ReportParameter Label="Text" Value="{Binding [text]}"/>
</local:ReportControl.Parameters>
</local:ReportControl>
我遇到的问题是,当我将其与从下拉列表中选择的多个报告一起使用时,在报告之间进行切换会重置组合框值,但不会重置其他任何值。
可以在github here上找到显示我所遇到的问题的Toy应用程序的副本,其中我有一个带有两个选项卡的选项卡控件,并且在第一个选项卡上有一个下拉列表,显示了2个报告
TestViewModel类设置报告,而MainWindow设置用于显示报告的主UI。为了模拟以下事实:在生产应用程序中,报告可以来自多个位置,因此附加了自己的视图以进行不同的参数配置,Report类具有一个如上所述声明参数的ReportView对象。最后,ReportControl和ReportParameter再现了Main报表控件和添加的参数。我仅实现了一个基本的自由流文本和组合框列表作为参数,以证明这是组合框绑定的问题。模板选择器和数据类型枚举也可以在ReportParameter.cs中找到。
任何人都不会知道为什么要重置组合框,但是如果在xaml中配置了报告而又没有使用内容控件的其他抽象的话,它们不会重置吗?关于如何解决此问题的想法也将很有用。
编辑:将解决方案上传到GitHub,以使人们更易于访问。
答案 0 :(得分:0)
解决方案是将项源作为私有值存储在ReportParameter中,并在控件内部绑定到该内部值,而不是绑定的外部值。
这样做的原因是,每次更改组合框项目时,WPF都会丢弃并重新创建UI。因此,导致将商品来源设置为空,随后将空值设置为所选值。