代码之家  ›  专栏  ›  技术社区  ›  Peter

基于条件的WPF数据绑定

  •  1
  • Peter  · 技术社区  · 16 年前

    目标 开发一个显示指定周的摘要数据的自定义控件。

    传入的数据如下:

    3rd May 2009        Customer A     $2000
    4th May 2009        Customer A     $3900
    6th May 2009        Customer B     $1900
    

    预期显示为

        3rd May      4th May        5th May        6th May
       Customer A   Customer A                    Customer B
        $2000        $1900                          $1900 
    

    如您所见,数据是以日期为条件的。

    项目是否可以基于WPF中的条件进行数据绑定?

    即当数据源日期=当前项目日期时显示摘要

    或者我应该坚持用后面的C来编码这个逻辑吗?

    ------------编辑安迪的问题--

    我可以让它实现接口,但不能实现基类。

    我要做的是让控件显示一年中价值1周的日期,这将通过名为“当前周”的属性设置。

    然后,当传入已知的数据源(请参见上面的示例表)时,我希望控件中的任何日项目从数据源中提取数据(如果有),如果没有,则仍显示,但只显示日期。

    数据将是网格摘要对象的列表

    public class GridSummary
    {
         public DateTime SummaryDate;
         public Client Customer;
         public decimal Amount;
    }
    
    2 回复  |  直到 16 年前
        1
  •  1
  •   Andy    16 年前

    如果我理解正确,您希望以列表格式显示一些表格数据。这是正确的吗?

    你对数据输入有什么了解?它是否保证实现接口,或者从基类继承?如果是后者,那么我认为数据模板是可行的方法——为您期望得到的每个可能的类型创建一个数据模板,并为每个集合 TargetType 它应该显示的类型。将数据绑定到控件时,WPF将自动为集合中的每个对象选择正确的数据模板。

    如果你对输入的数据一无所知,你怎么可能知道要显示什么,或者如何显示它?似乎至少应该知道一些关于传入数据的事情。

    (有可能我不明白你想做什么-请澄清,我看看是否能提供更多帮助。)

    更新

    听起来控件的数据源将是 GridSummary 物体。如果是这样,那么我认为你可以使用 CollectionViewSource 作为数据源(它基本上包装了 网格摘要 对象),并订阅 Filter 事件。对于传入的每个对象,将日期与 CurrentWeek 属性,如果日期在该周内,则接受它(链接的msdn页有一个示例)。

        2
  •  0
  •   Nate CSS Guy    16 年前

    您可以这样做:

    if(a)
        this.DataSource = a;
    else
        this.DataSource = b;
    

    但我不确定这就是你的意思。

    你在做你自己的渲染吗?或者您是在用基本控件构建控件?您可能可以使用嵌套控件来获得所需的内容,并且可以有条件地控制嵌套控件。