【问题标题】:WPF Databinding based on conditions基于条件的 WPF 数据绑定
【发布时间】:2010-10-30 17:24:39
【问题描述】:

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

传入的数据如下:

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 周,这将通过一个名为 current week 的属性来设置。

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

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

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

【问题讨论】:

  • 对不起,我应该更清楚一点,我希望开发人员能够将任何数据源放入我的控件中,并且我的控件只会选择它显示的给定日期的数据。
  • 数据格式应该是上面的表格但它不起作用,对不起我是新人。所以每个项目都显示日期,下面的客户,然后是下面的收费金额。

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


【解决方案1】:

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

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

如果您对传入的数据一无所知,您怎么可能知道要显示什么或如何显示呢?看起来至少应该有一些关于传入数据必须知道的事情。

(我可能不明白您要做什么 - 请澄清一下,我会看看能否提供更多帮助。)

更新

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

【讨论】:

  • 我以前发现过这个,但不确定。我明白你在说什么,我将不得不做一些额外的代码,因为每天都需要在一周过滤器上进行额外的过滤,但我理解你正在解释的原则。感谢您的帮助!
【解决方案2】:

你可以这样做:

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

我不确定你的意思。

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

【讨论】:

  • 这是在 WPF 中,所以本质上它将是一种带有页眉和页脚的列表控件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
  • 2012-11-08
  • 1970-01-01
  • 2011-01-02
  • 2011-01-06
  • 2013-02-22
  • 1970-01-01
相关资源
最近更新 更多