2011-07-21 65 views
0

我有一個ColumnSeries圖表,我想從視圖模型中控制所選項目。我通過將圖表的SelectedItem綁定到視圖模型上的對象來實現此目的。如何從ViewModel爲ColumnSeries圖表設置SelectedItem

<chartingToolkit:Chart Grid.Row="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" BorderThickness="0" MinHeight="200" Margin="0" x:Name="ratingsChart" Style="{StaticResource ChartWithoutLegendStyle}"> 
     <chartingToolkit:Chart.Series> 
      <chartingToolkit:ColumnSeries x:Name="chartRatingColSeries" IsSelectionEnabled="True" 
              SelectedItem="{Binding SelectedRatingDistribution, Mode=TwoWay}" 
              ItemsSource="{Binding RatingsList}" 
              IndependentValueBinding="{Binding RatingName}" 
              DependentValueBinding="{Binding NumberOfGoodies}"> 
      </chartingToolkit:ColumnSeries> 
     </chartingToolkit:Chart.Series> 
    </chartingToolkit:Chart> 

頁面上有各種元素會強制圖表的數據被重新加載(通過web服務)。當我需要重新加載圖表數據(從視圖模型)時,我想將圖表的SelectedItem設置爲第一個數據點。這似乎起作用,除非圖表不能直觀顯示(默認爲紅色)所選項目。下面是Web服務調用和重置所選​​項目之後重新加載數據樣本代碼:

private RatingDistribution _selectedRatingDistribution = new RatingDistribution(); 
     public RatingDistribution SelectedRatingDistribution 
     { 
      get { return _selectedRatingDistribution; } 
      set 
      { 
       _selectedRatingDistribution = value; 
       RaisePropertyChanged("SelectedRatingDistribution"); 
      } 
     } 


     private ObservableCollection<RatingDistribution> _lstRatings = new ObservableCollection<RatingDistribution>(); 
     public ObservableCollection<RatingDistribution> RatingsList 
     { 
      get { return _lstRatings; } 
      set 
      { 
       _lstRatings = value; 
       RaisePropertyChanged("RatingsList"); 
      } 
     } 

     private void GetRatingsDistributionCompleted(object sender, GetRatingsDistributionCompletedEventArgs e) 
     { 
      IsBusy = false; 

      RatingsList.Clear(); 
      foreach (RatingDistribution rd in e.Result) 
       RatingsList.Add(rd); 

      SelectedRatingDistribution = RatingsList[0]; 
     } 

設置從View模式不會在視覺上展示紅色在圖表上所選項目的SelectedRatingDistribution。有任何想法嗎??

更新: 所以,如果我點擊一欄,圖表正確顯示紅色爲使所選項目:correct behavior

但如果我設置從視圖模型的SelectedItem,列將不被顯示爲紅色(作爲選擇項)以下

+1

你能設定在比呈現週期較低的調度優先級的'SelectedRatingDistribution'?就像'App.Current.Dispatcher.BeginInvoke(DispatcherPriority.Loaded,new Action(delegate(){SelectedRatingDistribution = RatingsList [0];}));' – Rachel

+0

好評...這讓我朝着正確的方向前進。由於目前在Silverlight中不支持DispatchterPriority,因此我調整了您的解決方案並在以下答案中發佈。謝謝! – tsiorn

回答

0

更改的功能修復的問題..

​​