0

グラフにバインドしたいデータテーブルの列が2つあります。Visifireサンプルはobservablecollectionを使用した例を示していますが、datatableをobservablecollectionに関連付ける方法がわかりません(これが私の問題だと思います)。視覚化するサンプルを作成しました。チャートにはvisifireを使用しています。

    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フォーラムで質問しようとしましたが、サポート担当者はただ怠惰でした(私がすでにサンプルを見ていると言ったときにサンプルを見るように言われました。さらに、コードの一部はサンプルからコピーされています) 。

この種のことで、私はvisifireを捨てて、できれば優れたドキュメントとサポートを備えた代替手段を探したいと思うようになります。どんな提案でも大歓迎です。

4

1 に答える 1

1

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

上記の例を見ると、DataSeriesのDataSourceプロパティが、コレクション(ValueクラスのObservableCollection)にすぎないGridのItemsSourceとして設定されていることがわかります。

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

したがって、DataSeriesのDataSourceプロパティを行のコレクション(テーブルのみ)として設定する必要があります。

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>

于 2011-03-07T04:44:47.547 に答える