Привязка набора данных к диаграмме

У меня есть 2 столбца из таблицы данных, которую я хочу привязать к графику. Пример Visifire показывает пример использования observablecollection, но я не знаю, как связать datatable с observablecollection (что, я думаю, является моей проблемой). Я создал образец для визуализации. Я использую видимость для диаграмм.

    public MainWindow()
    {
        InitializeComponent();

        dtBandwidth = dsBandwidth.Tables.Add();
        dtBandwidth.Columns.Add("ID", typeof(int));
        dtBandwidth.Columns.Add("Time", typeof(double));
        dtBandwidth.Columns.Add("Value", typeof(double));

        dataGrid1.ItemsSource = dtBandwidth.DefaultView;

        DataSeries ds = new DataSeries();
        ds.RenderAs = RenderAs.Line;
        ds.DataSource = dtBandwidth???; //i know this is wrong. what should i do?
        DataMapping dm = new DataMapping();
        dm.MemberName = "XValue";
        dm.Path = "Time";
        ds.DataMappings.Add(dm);
        dm = new DataMapping();
        dm.MemberName = "YValue";
        dm.Path = "Value";
        ds.DataMappings.Add(dm);

        chart1.Series.Add(ds);
        chart1.DataContext = dtBandwidth???; //i know this is wrong. what should i do?

    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        dtBandwidth.Rows.Add(1, 1.0, 5.2);
        dtBandwidth.Rows.Add(2, 2.1, 5.1);
        dtBandwidth.Rows.Add(3, 3.2, 5.3);
        dtBandwidth.Rows.Add(4, 4.3, 5.4);
        dtBandwidth.Rows.Add(5, 5.4, 5.5);
    }

а вот и хамл.

<Grid>
    <DataGrid AutoGenerateColumns="True" Height="311" HorizontalAlignment="Left" Name="dataGrid1" VerticalAlignment="Top" Width="143" />
    <my:Chart HorizontalAlignment="Left" Margin="149,0,0,0" Name="chart1" VerticalAlignment="Top" Height="311" Width="354" />
    <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="186,328,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
</Grid>

Я попытался спросить на официальном форуме visifire, но парень поддержки был просто ленив (который сказал мне, чтобы посмотреть на образец, когда я сказал им, что я уже смотрю на образец. Плюс, часть кода скопирована из образца),

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

1 ответ

Решение

http://www.visifire.com/silverlight_examples_details.php?id=10

Если вы посмотрите на приведенный выше пример, то увидите, что свойство DataSource объекта DataSeries установлено как ItemsSource of Grid, представляющее собой не что иное, как коллекцию (ObservableCollection of Value class).

DataSource = "{Binding ItemsSource, ElementName = MyGrid}"

Таким образом, вам нужно установить свойство DataSource DataSeries как набор строк (ничего, кроме Table).

ds.DataSource = dtBandwidth.Tables [0].DefaultView;

Проверьте пример кода ниже.

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        DataSet dtBandwidth = new DataSet();
        dtBandwidth.Tables.Add("BandWidth");
        dtBandwidth.Tables[0].Columns.Add("ID", typeof(int));
        dtBandwidth.Tables[0].Columns.Add("Time", typeof(double));
        dtBandwidth.Tables[0].Columns.Add("Value", typeof(double));

        dtBandwidth.Tables[0].Rows.Add(new object[] { 2, 1, 5 });
        dtBandwidth.Tables[0].Rows.Add(new object[] { 2, 2, 25 });

        DataSeries ds = new DataSeries();
        ds.RenderAs = RenderAs.Line;

        ds.DataSource = dtBandwidth.Tables[0].DefaultView;

        DataMapping dm = new DataMapping();
        dm.MemberName = "XValue";
        dm.Path = "Time";
        ds.DataMappings.Add(dm);
        dm = new DataMapping();
        dm.MemberName = "YValue";
        dm.Path = "Value";
        ds.DataMappings.Add(dm);

        chart1.Series.Add(ds);

    }
}

XAML:

<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        xmlns:vc="clr-namespace:Visifire.Charts;assembly=WPFVisifire.Charts">
    <Grid>
        <vc:Chart Name="chart1" Width="500" Height="300" Padding="10,10" Margin="10,0" AnimatedUpdate="True">
    </vc:Chart>
</Grid>

Другие вопросы по тегам