【问题标题】:How to populate point chart with with free separate lists?如何使用免费的单独列表填充点图?
【发布时间】:2017-11-11 23:29:58
【问题描述】:

我有 BindingLists 存储一些我想在图表上可视化的对象。

BindingList<Place> places;
BindingList<Person> people;
BindingList<Animal> animals;

它们都实现了以下接口:

interface IMapObject
    {
        int getPositionX();
        int getPositionY();
    }

如何轻松地将它们全部绑定到单个 WinForms 点图?每个列表都需要在单独的Series 中。当我将新对象添加到这些列表之一时,图表应该会自动更新。

【问题讨论】:

  • 什么是点图?那是原生 Windows 窗体控件吗?
  • @CodingYoshi 它是 System.Windows.Forms.DataVisualization.Charting.Chart,本机 Windows 窗体控件配置为在 2D 空间中显示点

标签: c# winforms


【解决方案1】:

我以前从未使用过 Chart 控件,但我了解绑定的工作原理,所以我很确定这会起作用。

首先将您的界面更改为:

interface IMapObject
{
    int PositionX { get; set; }
    int PositionY { get; set; }
}

实现它,然后像这样绑定它:

ChartOne.Series.First().XValueMember = "PositionX";
ChartOne.Series.First().YValueMembers = "PositionY";

ChartOne.DataSource = places;

如您所见,字符串用于表示XValueMemberYValueMembers,因此并没有真正利用您的界面并进行强类型 绑定。您需要问的问题是,努力是否真的值得,或者只是使用字符串。如果您想要强类型绑定,请参阅this 线程了解如何完成(与图表没有直接关系,但想法相同)。如果我是你,我会选择字符串。

【讨论】:

  • 您的回答描述了如何将一个 BindingList 绑定到一个图表。如果我想将三个 BindingList 分配给数据源怎么办?
  • @Piotrek 那不是一个不同的系列吗?
  • 是的,这些列表中的每一个都属于不同的系列。但是在您的回答中,您仅将places 作为数据源。此外,我找不到任何方法将 List 直接绑定到 Series 而不是整个图表。
  • @Piotrek 不确定您的意思。对于另一个系列,您可以写ChartOne.Series[1].XValueMember = "PositionX2"; ChartOne.Series[1].YValueMembers = "PositionY2"。因此,您的数据源将包含每个系列的所有点,而不仅仅是地点。
  • 我也不确定你的意思 ^^ places 只是我需要在单个图表上显示的三组数据之一。我还需要显示peopleanimals(代表它们的点需要看起来不同)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
相关资源
最近更新 更多