动态组合框参数重置

时间:2018-08-10 15:04:37

标签: c# wpf mvvm data-binding custom-controls

我创建了一个报表控件,该控件接受一组绑定到基础对象的参数,并使用数据模板选择器生成控件。

    <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,以使人们更易于访问。

1 个答案:

答案 0 :(得分:0)

解决方案是将项源作为私有值存储在ReportParameter中,并在控件内部绑定到该内部值,而不是绑定的外部值。

这样做的原因是,每次更改组合框项目时,WPF都会丢弃并重新创建UI。因此,导致将商品来源设置为空,随后将空值设置为所选值。