2013-02-24 80 views
0

我是MVVM的新手。目前我所有的代碼都是以鏈接到XAML的.cs文件編寫的。我想切換到MVVM,但遇到困難。我將嘗試解釋爲什麼:切換到MVVM問題

我有很多不同的圖表控件和輸入數據,以.cs文件中指定的方式直接訪問Chart對象並使用它的屬性programaticaly爲我的圖表添加點。

例子:

foreach (var group in qcv.Groups) 
{ 
    AreaSeries areaSeries = new AreaSeries(); 
    areaSeries.CombineMode = Telerik.Charting.ChartSeriesCombineMode.Stack; 
    areaSeries.ValueBinding = new PropertyNameDataPointBinding("Rev"); 
    areaSeries.CategoryBinding = new PropertyNameDataPointBinding("Date"); 
    areaSeries.ItemsSource = group as IEnumerable; 
    RadChart1.Series.Add(areaSeries); 
} 

但只要我切換到MVVM RadChart1對象變得不可訪問的視圖模型文件。我怎樣才能讓它在ViewModel類中可見,或者你可以建議更好的方法,我怎樣才能得到該對象,併爲我的圖表提供輸入而無需更改我的代碼?

我的XAML文件:

<UserControl x:Class="FrontEnd.RevenueChart" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:FrontEnd" 
      mc:Ignorable="d" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" HorizontalAlignment="Stretch" > 

    <UserControl.DataContext> 
     <local:RevenueChartViewModel/> 
    </UserControl.DataContext> 
    <Grid> 

     <telerik:RadCartesianChart HorizontalAlignment="Stretch" x:Name="RadChart1" Palette="Metro" Zoom="10,1"> 

      <telerik:RadCartesianChart.HorizontalAxis> 
       <telerik:CategoricalAxis/> 
      </telerik:RadCartesianChart.HorizontalAxis> 

      <telerik:RadCartesianChart.VerticalAxis> 
       <telerik:LinearAxis/> 
      </telerik:RadCartesianChart.VerticalAxis> 

      <telerik:RadCartesianChart.Behaviors> 
       <telerik:ChartPanAndZoomBehavior ZoomMode="Both"> 
       </telerik:ChartPanAndZoomBehavior> 
      </telerik:RadCartesianChart.Behaviors> 
     </telerik:RadCartesianChart> 
    </Grid> 
</UserControl> 
+0

嗨!我現在無法整合一個例子,但請看看這裏:http://www.telerik.com/help/silverlight/radchart-how-to-mvvm-support.html,這會有幫助嗎?讓我知道這是否適合你! MVVM是def。要走的路 – 2013-02-24 02:02:03

+0

虹膜,謝謝你的回答。我現在正在研究這個例子,我會試着弄清楚那裏發生了什麼。謝謝! – 2013-02-24 02:54:28

回答

0

訪問從視圖模型視圖控件是一個很大的禁忌在MVVM土地。你必須反思你的想法:而不是添加東西Series,綁定Series東西。使用SeriesMapping s獲取圖表控件,將您的組轉換爲系列。這裏有一些非正式的代碼可以幫助你入門:

<telerik:RadCartesianChart HorizontalAlignment="Stretch" 
    Palette="Metro" Zoom="10,1" 
    Series="{Binding Groups}"><!-- <=== this is the important part --> 

    <telerik:RadChart.SeriesMappings> 
    <telerikCharting:SeriesMapping LegendLabel="Product Sales"> 
     <telerikCharting:SeriesMapping.SeriesDefinition> 
     <telerikCharting:AreaSeriesDefinition/> 
     </telerikCharting:SeriesMapping.SeriesDefinition> 
     <telerikCharting:SeriesMapping.ItemMappings> 
     <telerikCharting:ItemMapping DataPointMember="XCategory" FieldName="Date"/> 
     <telerikCharting:ItemMapping DataPointMember="YValue" FieldName="Rev"/> 
     </telerikCharting:SeriesMapping.ItemMappings> 
    </telerikCharting:SeriesMapping> 
    </telerik:RadChart.SeriesMappings> 
    ... 
+0

謝謝安東。聽起來不錯,並且有意義的是,你對MVVM中的訪問控制位置沒有任何限制。但不幸的是,我是UI設計的新手,你能否提供一些例子來說明你如何綁定並動態添加系列圖表?再次感謝,安東。 – 2013-02-24 02:30:57

+0

您不會將系列添加到MVVM中的圖表,您可以告訴它從哪裏獲取系列數據以及如何呈現它。這就是我的示例代碼片段所做的。如果你是新手,我不能做比問題中列出的教程更好的http://stackoverflow.com/questions/1405739/mvvm-tutorial-from-start-to-finish。 – 2013-02-24 10:48:28