Проблема загрузки данных в линейный график silverlight с помощью операторов ifd - PullRequest
0 голосов
/ 16 марта 2011

Я уже пару дней играю с silverlight и делаю успехи, но столкнулся с проблемой.

У меня нет опыта работы с C # (я программист на PHP).

У меня есть линейный график, отображающий данные без проблем, но я хочу показать разные данные в зависимости от того, какая информация передается.Все это настроено, но я сделал шаг назад, чтобы попытаться получить базовое, если / еще работает

Мой xaml.cs выглядит следующим образом:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace MyProject
{
public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();
        this.Loaded += new RoutedEventHandler(UC_Loaded);
    }

    void UC_Loaded(object sender, RoutedEventArgs e)
    {
        //int student_id = (int)App.Current.Resources["student_id"];
        int student_id = (int)10;
        //int test_id = (int)App.Current.Resources["test_id"];

        this.DataContext = this;
        List<Student> cust = new List<Student>();

        if (student_id==10)
        {

            cust.Add(new Student() { Date = "14th Oct", Result = 30 });
            cust.Add(new Student() { Date = "20th Oct", Result = 60 });
            cust.Add(new Student() { Date = "30th Oct", Result = 20 });
            cust.Add(new Student() { Date = "12th Nov", Result = 10 });
            cust.Add(new Student() { Date = "20th Nov", Result = 70 });

        }
        else
        {

            cust.Add(new Student() { Date = "14th Oct", Result = 10 });
            cust.Add(new Student() { Date = "20th Oct", Result = 10 });
            cust.Add(new Student() { Date = "30th Oct", Result = 10 });
            cust.Add(new Student() { Date = "12th Nov", Result = 10 });
            cust.Add(new Student() { Date = "20th Nov", Result = 10 });

        }
        this.DataContext = cust;
    }
}

public class Student
{
    public string Date { get; set; }
    public int Result { get; set; }
}
}

Мой XAML здесь:

<Grid x:Name="LayoutRoot" Background="White">
    <StackPanel>
        <toolkit:Chart Height="500" Width="600" Title="Test title">
            <toolkit:Chart.Series>
                <toolkit:LineSeries Title="Student Scores"
                                    ItemsSource="{Binding}"
                                    IndependentValueBinding="{Binding Date}"
                                    DependentValueBinding="{Binding Result}">
                    <toolkit:LineSeries.DataPointStyle>
                        <Style TargetType="toolkit:LineDataPoint">
                            <Setter Property="Background" Value="Lime"/>
                        </Style>
                    </toolkit:LineSeries.DataPointStyle>
                 </toolkit:LineSeries>
            </toolkit:Chart.Series>
            <toolkit:Chart.Axes>
                <toolkit:LinearAxis Orientation="Y" Minimum="0" Maximum="100" Interval="5" ShowGridLines="True" FontStyle="Italic"></toolkit:LinearAxis>
            </toolkit:Chart.Axes>

        </toolkit:Chart>
    </StackPanel>
</Grid>

Теперь, если я запускаю его без if / else и одного набора cust.Add, он работает как положено, но с if / else я получаю пустой график без точек на нем.

Заранее спасибо и надеюсь, что это имеет смысл!

Ответы [ 2 ]

1 голос
/ 17 марта 2011

Просто чтобы прояснить, ответ, данный Моисеем, есть там или там с парой твиков:

Не забудьте добавить:

using System.ComponentModel; 

И изменить:

public class Student : INotifyLayoutChange

до

public class Student : INotifyPropertyChanged
0 голосов
/ 16 марта 2011

Аххххххххххххххххх

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;

namespace MyProject
{
    public partial class MainPage : UserControl
    {
        private ObservableCollection<Student> m_Students = new ObservableCollection<Student>();

        public MainPage()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(UC_Loaded);
        }

        public ObservableCollection<Student> Students
        {
            get { return m_Students; }
            set { m_Students = value; }
        }

        void UC_Loaded(object sender, RoutedEventArgs e)
        {
            //int student_id = (int)App.Current.Resources["student_id"];
            int student_id = 10; // no need to type cast.
            //int test_id = (int)App.Current.Resources["test_id"];

            this.DataContext = Students;

            if (student_id == 10)
            {
                Students.Add(new Student() { Date = "14th Oct", Result = 30 });
                Students.Add(new Student() { Date = "20th Oct", Result = 60 });
                Students.Add(new Student() { Date = "30th Oct", Result = 20 });
                Students.Add(new Student() { Date = "12th Nov", Result = 10 });
                Students.Add(new Student() { Date = "20th Nov", Result = 70 });
            }
            else
            {
                Students.Add(new Student() { Date = "14th Oct", Result = 10 });
                Students.Add(new Student() { Date = "20th Oct", Result = 10 });
                Students.Add(new Student() { Date = "30th Oct", Result = 10 });
                Students.Add(new Student() { Date = "12th Nov", Result = 10 });
                Students.Add(new Student() { Date = "20th Nov", Result = 10 });
            }
        }
    }

    public class Student : INotifyLayoutChange
    {
        private string m_Date;
        private int m_Result;

        public event PropertyChangedEventHandler PropertyChanged;

        public string Date 
        { 
            get { return m_Date; } 
            set
            {
                if (m_Date == value)
                    return; // return values are the same, no update needed.
                m_Date = value;
                RaisePropertyChanged("Date");
            }
        }

        public int Result 
        { 
            get { return m_Result; }
            set
            {
                if (m_Result == value)
                    return;
                m_Result = value;
                RaisePropertyChanged("Result");
            }
        }

        private void RaisePropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...