首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Silverlight数据绑定问题-未绑定到POCO - Visifire

Silverlight数据绑定问题-未绑定到POCO - Visifire
EN

Stack Overflow用户
提问于 2012-02-27 22:04:21
回答 2查看 413关注 0票数 0

希望有人能帮助我解决一些令人沮丧的问题。

我有一个Graph (visifire),但只需将其视为标准的silverlight数据绑定控件即可。

当尝试直接绑定到包含从INotifyPropertyChanged继承的对象( List<> )的POCO对象时,绝对没有任何反应!

下面是我的字典条目类

代码语言:javascript
复制
   class GraphValue : INotifyPropertyChanged
    {

    public event PropertyChangedEventHandler PropertyChanged;

    private string name;
    public string IndicatorName
    {
        get
        {
            return name;                
        }

        set
        {
            name = value;
            onPropertyChanged(this, "IndicatorName");
        }
    }
    private double _value;
    public double IndicatorValue
    {
        get
        {
            return _value;
        }
        set
        {
            _value = value;
            onPropertyChanged(this, "IndicatorValue");
        }
    }

    private void onPropertyChanged(object sender, string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            PropertyChanged(sender, new PropertyChangedEventArgs(propertyName));
        }
    }
}

然后我创建了一个列表,并将其放入一个名为ClosedSameDayList的POCO类中。数据填充得很好,我检查过了。

当最终设置datacontext时,什么也没有发生!

代码语言:javascript
复制
MyGraph.DataContext = ClosedSameDayList.GraphValues.OrderBy(z => z.IndicatorName);

然而,这里有一个关键问题。

执行以下操作时,一切都会正常工作:

代码语言:javascript
复制
ObservableCollection<KeyValuePair<string, double>> g = new ObservableCollection<KeyValuePair<string, double>>();

foreach (var item in ClosedSameDayList.GraphValues)
{
  g.Add(new KeyValuePair<string, double>(item.IndicatorName, item.IndicatorValue));
}    
MyGraph.DataContext = g.OrderBy(z => z.Key);

下面是图表的XAML:

代码语言:javascript
复制
            <vc:Chart xmlns:vc="clr-namespace:Visifire.Charts;assembly=SLVisifire.Charts" DataContext="{Binding}" Name="MyGraph" Height="240" BorderThickness="0" Theme="Theme2" View3D="True" ToolBarEnabled="True" >
                <vc:Chart.Titles>
                    <vc:Title Text="My Title"   />
                </vc:Chart.Titles>
                <vc:Chart.AxesX>
                    <vc:Axis Title="My Title" />
                </vc:Chart.AxesX>
                <vc:Chart.AxesY>
                    <vc:Axis Title="My Title" AxisType="Primary" />
                </vc:Chart.AxesY>
                <vc:Chart.Series>
                    <vc:DataSeries RenderAs="Column" DataSource="{Binding}">
                        <vc:DataSeries.DataMappings>
                            <vc:DataMapping MemberName="AxisXLabel" Path="IndicatorName"></vc:DataMapping>
                            <vc:DataMapping MemberName="YValue" Path="IndicatorValue"></vc:DataMapping>
                        </vc:DataSeries.DataMappings>
                    </vc:DataSeries>
                </vc:Chart.Series>
            </vc:Chart>

关于ClosedSameDay的代码

代码语言:javascript
复制
class ClosedSameDay
    {
        public CamlQuery CamlQuery { get; set; }
        public List List { get; set; }
        public ListItemCollection Listitems { get; set; }
        public List<GraphValue> GraphValues { get; set; }

        public ClosedSameDay()
        {
            GraphValues = new List<GraphValue>();
            CamlQuery = new CamlQuery();
            CamlQuery.ViewXml = "<View>" +
            "    <Method Name='ITServicedesk_Dashboard_ClosedSameday_Individuals_Readlist'/>" +
            "    <Query>" +
            "        <OrderBy>" +
            "            <FieldRef Name='id'/>" +
            "        </OrderBy>" +
            "     </Query>" +
            "     <ViewFields>" +
            "         <FieldRef Name='id'/>" +
            "         <FieldRef Name='Name'/>" +
            "         <FieldRef Name='Total'/>" +
            "     </ViewFields>" +
            "</View>";
        }
        public void PopulateObjectData()
        {
            foreach (ListItem item in Listitems)
            {
                double value = -1;
                double.TryParse(item["Total"].ToString(), out value);

                if (item["Name"] != null && !string.IsNullOrEmpty(item["Name"].ToString()) && value != -1)
                {
                    this.GraphValues.Add(new GraphValue
                    {
                        IndicatorName = item["Name"].ToString(),
                        IndicatorValue = value
                    });
                }
            }
        }
        public DataSeries BuildDataSeries()
        {

            ObservableCollection<KeyValuePair<string, double>> g = new ObservableCollection<KeyValuePair<string, double>>();
            foreach (var item in this.GraphValues)
            {
                g.Add(new KeyValuePair<string, double>(item.IndicatorName, item.IndicatorValue));
            }
            Visifire.Charts.DataSeries ds = new Visifire.Charts.DataSeries();
            ds.RenderAs = Visifire.Charts.RenderAs.Column;
            ds.DataSource = g.OrderBy(i => i.Key);

            Visifire.Charts.DataMapping dm = new Visifire.Charts.DataMapping();
            dm.MemberName = "AxisXLabel";
            dm.Path = "Key";
            ds.DataMappings.Add(dm);

            Visifire.Charts.DataMapping dm2 = new Visifire.Charts.DataMapping();
            dm2.MemberName = "YValue";
            dm2.Path = "Value";
            ds.DataMappings.Add(dm2);

            return ds;
        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-09 16:02:03

我要结束这个问题。使用下面通过创建DataSeries的手动数据绑定方法,一切工作正常

代码语言:javascript
复制
public DataSeries BuildDataSeries() 
{ 

    ObservableCollection<KeyValuePair<string, double>> g = new ObservableCollection<KeyValuePair<string, double>>(); 
    foreach (var item in this.GraphValues) 
    { 
        g.Add(new KeyValuePair<string, double>(item.IndicatorName, item.IndicatorValue)); 
    } 
    Visifire.Charts.DataSeries ds = new Visifire.Charts.DataSeries(); 
    ds.RenderAs = Visifire.Charts.RenderAs.Column; 
    ds.DataSource = g.OrderBy(i => i.Key); 

    Visifire.Charts.DataMapping dm = new Visifire.Charts.DataMapping(); 
    dm.MemberName = "AxisXLabel"; 
    dm.Path = "Key"; 
    ds.DataMappings.Add(dm); 

    Visifire.Charts.DataMapping dm2 = new Visifire.Charts.DataMapping(); 
    dm2.MemberName = "YValue"; 
    dm2.Path = "Value"; 
    ds.DataMappings.Add(dm2); 

    return ds; 
} 
票数 0
EN

Stack Overflow用户

发布于 2012-02-28 00:54:52

试用Visifire Example Area.表单中的"Quick Start With DataBinding"示例应用程序

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9466294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档