找回密码
 立即注册

QQ登录

只需一步,快速开始

fxdmhtt

初级会员

9

主题

38

帖子

221

积分

初级会员

积分
221

活字格认证微信认证勋章

fxdmhtt
初级会员   /  发表于:2015-8-19 01:29  /   查看:7291  /  回复:7
因为数据源的值相差太大,故需要设置多坐标轴。
官方日志(http://blog.gcpowertools.com.cn/ ... WPF_ChartType2.aspx)下方有个“轴的动态绑定”,无法点开那个链接。
而我是通过SeriesItemsSource设置的一系列数列,我希望在XAML中绑定坐标轴名,剩下的只需要我生成坐标轴,每个序列就能自动绑定到相应的坐标轴上。类似如下:
<c1:XYDataSeries Label="{Binding Label}" AxisY="{Binding AxisName}" ChartType="{Binding ChartType}" ItemsSource="{Binding}" ValueBinding="{Binding Value}" XValueBinding="{Binding Date}"/>
现在的问题是,AxisY因为不是依赖属性,不允许我做如下绑定。但我确实需要根据不同的取值范围对序列分组,不同的序列使用何时的坐标轴,通过series.AxisName设置坐标轴名。
请问这个需求该如何表达实现呢?万分感激。


版本VS2013,C1 2014V1。

评分

参与人数 1金币 +200 收起 理由
Alice + 200 提出问题奖励200金币

查看全部评分

7 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-8-19 10:09:00
沙发
回复 1楼fxdmhtt的帖子

谢谢你的反馈。
之前登录才可见,已经修复此问题,谢谢反馈,已经奖励金币200.
轴的动态绑定博客请参考:
http://blog.gcpowertools.com.cn/ ... micAxisBinding.aspx

另外多轴图片,可以参考另一个博客:
http://blog.gcpowertools.com.cn/ ... F_MultipleAxis.aspx
里面添加了多个轴。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
fxdmhtt
初级会员   /  发表于:2015-8-21 20:27:00
板凳
博客是修复了,但是我的疑问完全没有解答啊。
我是想知道,如何对一个序列动态绑定轴。Demo不知道在讲什么,跑了一遍也完全不是我想要的效果。

现在能编译通过的XAML如下:
<c1:C1Chart.Data>
    <c1:ChartData SeriesItemsSource="{Binding ChartData}">
        <c1:ChartData.SeriesItemTemplate>
            <DataTemplate>
                <c1:XYDataSeries Label="{Binding Label}" ChartType="{Binding ChartType}" ItemsSource="{Binding}" ValueBinding="{Binding Value}" XValueBinding="{Binding Date}"/>
            </DataTemplate>
        </c1:ChartData.SeriesItemTemplate>
    </c1:ChartData>
</c1:C1Chart.Data>

假设ChartType=Line。在这中间,XYDataSeries 内会有很多条折线的源数据,例如两条:总人数环比增幅百分数与时间、总人数与时间。这些数据的值相差非常大,故需要用多个Y轴来显示,所以我不能将XYDataSeries.AxisY设置死。但我知道百分数的序列该显示在Axis.Name="ercentage"的Y轴上,总人数的序列该显示在Axis.Name="NormalValue"的Y轴上。所以我希望将XAML写成如下形式:
<c1:C1Chart.Data>
    <c1:ChartData SeriesItemsSource="{Binding ChartData}">
        <c1:ChartData.SeriesItemTemplate>
            <DataTemplate>
                <c1:XYDataSeries Label="{Binding Label}" ChartType="{Binding ChartType}" AxisY="{Binding AxisName}" ItemsSource="{Binding}" ValueBinding="{Binding Value}" XValueBinding="{Binding Date}"/>
            </DataTemplate>
        </c1:ChartData.SeriesItemTemplate>
    </c1:ChartData>
</c1:C1Chart.Data>

相应的,后台类如下定义:
    public sealed class ChartPoint
    {
        public string Date { get; set; }
        public double Value { get; set; }
    }

    public sealed class ChartSeries : ObservableCollection<ChartPoint>
    {
        public string Label { get; set; }
        public ChartType ChartType { get; set; }
        public string AxisName { get; set; }
    }

这样,通过对每个序列设置不同的AxisName,就能自动对序列绑定上相应的AxisY。但不知什么道理,AxisY不是依赖属性,我无法对AxisY进行Binding。请问这个问题该如何解决。
还烦请老师参照我的代码给一个简单的demo,我搜遍了网上现有的资料,没有发现比较科学的解决方案。万分感激!
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-8-24 12:21:00
地板
回复 3楼fxdmhtt的帖子

很抱歉没有正确理解你的意思。
根据目前理解轴是希望动态生成多个,并进行绑定。很抱歉AxisY属性并不是dependency property。它不能动态的设置轴。
目前建议的两种方法:
1.通过cs代码 c1Chart1.View.Axes.Add方法去动态的添加Y轴的数量。代码参考:
  1. Axis ay = new Axis();
  2.                     ay.AxisType = AxisType.Y;
  3.                     ay.Min = tag.ConfigMin;
  4.                     ay.Max = tag.ConfigMax;
  5.                     ay.Name = report.ayName;//从数据源获取
  6.                     c1Chart1.View.Axes.Add(ay);
复制代码


2.自己写扩展类,用附加依赖属性,基本思路就是创建DP类型和C1chart的轴创建联系,在扩展类里去实现c1ChartView.Axes.Add(axis)。这部分需要自己编代码实现。
你可以参考下如下链接的帖子,5-7楼的讨论。用户有自定义DP实现轴的动态绑定。
http://gcdn.gcpowertools.com.cn/showtopic-17117.html

希望对你有帮助。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
fxdmhtt
初级会员   /  发表于:2015-8-24 22:06:00
5#
回复 4楼Alice的帖子

老师,我认为您应该还是未能正确理解我的意思。
代码我下载下来看了,也读了,代码是用来坐标轴绑定DP类型的,DP类型发生变化坐标轴自动发生改变。
我要的不是这个效果。
我已经设定好几个坐标轴了,这几个坐标轴是固定死了的,不需要动态更新。我需要的是,序列“绑定”在哪个坐标轴上。毕竟一个SeriesItemsSource里有好几个序列,我希望对每个序列绑定不同的坐标轴,而坐标轴名是后台代码动态设定的,坐标轴本身是固定死了的。不知现在老师是否明白我的意思?
回复 使用道具 举报
gw0506
超级版主   /  发表于:2015-8-25 17:05:00
6#
你试试这个demo可以解决问题吗。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
fxdmhtt
初级会员   /  发表于:2015-8-26 20:38:00
7#
回复 6楼gw0506的帖子


有想过自己写依赖属性,尝试了失败了,这正是我想要的!!!!
万分感激!
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-8-27 09:40:00
8#
回复 7楼fxdmhtt的帖子

谢谢你的反馈。
此问题关闭,如果有新问题欢迎开新帖。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部