Привязка набора данных к диаграмме - PullRequest
0 голосов
/ 04 марта 2011

У меня есть 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);
    }

а вот и xaml.

<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 Ответ

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

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

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

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

Таким образом, вам необходимо установить свойство DataSource DataSeries как набор строк (только таблица).

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>

...