WPF数据绑定基于条件

时间:2009-06-02 15:25:31

标签: wpf data-binding controls custom-controls datasource

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

传入的数据如下:

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#编写这个逻辑吗?

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

我可以让它实现一个接口而不是基类。

我想要做的是让控件显示一年中的一周,这将通过一个名为当前周的属性来设置。

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

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

public class GridSummary
{
     public DateTime SummaryDate;
     public Client Customer;
     public decimal Amount;
}

2 个答案:

答案 0 :(得分:1)

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

您对数据输入了解多少?是保证实现接口还是从基类继承?如果是后者,那么我认为数据模板是可行的方法 - 为您希望给出的每种可能类型创建数据模板,并为每个集合TargetType添加它应显示的类型。将数据绑定到控件时,WPF将自动为集合中的每个对象选择正确的数据模板。

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

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

<强>更新

听起来您的控件的数据源将是GridSummary个对象的列表。如果是这种情况,那么我认为您可以使用CollectionViewSource作为数据源(它基本上包装了您的GridSummary个对象的集合),并订阅其Filter事件。对于传入的每个对象,将日期与CurrentWeek属性的周比较,如果该日期在该周内接受它(链接的MSDN页面有一个示例)。

答案 1 :(得分:0)

你可以这样做:

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

我不确定你的意思是什么。

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