2011-03-04 49 views
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並尋找替代品,最好有良好的文檔和支持。任何建議都是值得歡迎的。

回答

1

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

如果你看看上面的例子可以看到DataSeries的是DataSource屬性設置爲網格的ItemsSource這不過是一個集合(價值類的ObservableCollection)。

數據源= 「{綁定的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>