2017-07-05 39 views
0

我有一個問題,讓我的程序中顯示的內容,我懷疑我搞砸了有關DataContext的東西。我使用的控件來自名爲Syncfusion的擴展(用於顯示圖形),但它可以是顯示這些項目的任何其他控件。WPF:與DataContext和ViewModel的問題

MainWindow.xaml.cs:

 public MainWindow() 
    { 
     InitializeComponent(); 
     ViewModel _viewModel = new ViewModel(); 
     DataContext = _viewModel; 
    } 

ViewModel.cs

public class ViewModel 
{ 
    public ObservableCollection<TotalData> TotalDataColl { get; set; } 

    public ViewModel() 
    { 
     TotalDataColl = new ObservableCollection<TotalData>(); 
     var vm = new ChartViewModel 
     { 
      Series = new ObservableCollection<SeriesViewModel> 
      { 
       new SeriesViewModel{type="Lemons", Items = new ObservableCollection<ItemViewModel>{new ItemViewModel{source = "January", value = 25}, new ItemViewModel{source = "February", value = 35}}}, 
       new SeriesViewModel{type="Oranges",Items = new ObservableCollection<ItemViewModel>{new ItemViewModel{source = "January", value = 22}, new ItemViewModel{source = "February", value = 36}}} 
      } 

     }; 
    } 

} 

MainWindow.xaml

<Grid> 
    <local:ExtendedChart ItemsSource="{Binding Series}" Margin="0,-38,0,97"> 
     <local:ExtendedChart.ItemTemplate> 
      <DataTemplate> 
       <chart:ColumnSeries ItemsSource="{Binding Items}" DependentValuePath="value" IndependentValuePath="source" Title="{Binding type}" /> 
      </DataTemplate> 
     </local:ExtendedChart.ItemTemplate> 
    </local:ExtendedChart> 
</Grid> 

DataClass.cs

public class ChartViewModel : ObservableObject 
{ 
    private ObservableCollection<SeriesViewModel> _series; 
    public ObservableCollection<SeriesViewModel> Series 
    { 
     get 
     { 
      return _series; 
     } 
     set 
     { 
      _series = value; 
      OnPropertyChanged("Series"); 
     } 
    } 
} 

public class SeriesViewModel : ObservableObject 
{ 
    private ObservableCollection<ItemViewModel> items; 
    private string _type; 
    public string type { get { return _type; } set { _type = value; OnPropertyChanged("_type"); } } 
    public ObservableCollection<ItemViewModel> Items { get { return items; } set { items = value; OnPropertyChanged("Items"); } } 
} 

public class ItemViewModel : ObservableObject 
{ 
    private string _source; 
    private double _value; 
    public string Source { get { return _source;} set { _source = value; OnPropertyChanged("Source"); } } 

    public double Value { get { return _value; } set { _value = value;OnPropertyChanged("Value"); } } 
} 
+0

哪裏是ChartViewModel公共財產的視圖模型?它的構造函數中的一個局部變量不是一個屬性? –

+0

確保你所有的內部類型實現'INotifyPropertyChanged' – Jimbot

+0

@SushilMate我不好,我剛剛添加了他們的編輯。 – Lacynt

回答

1

視圖模型

public class ViewModel 
    { 
    public ObservableCollection<TotalData> TotalDataColl { get; set; } 
    public ChartViewModel ChartSeriesViewModel { get; set; } 
    public ViewModel() 
    { 
     TotalDataColl = new ObservableCollection<TotalData>(); 
     ChartSeriesViewModel = new ChartViewModel 
     { 
      Series = new ObservableCollection<SeriesViewModel> 
      { 
       new SeriesViewModel{type="Lemons", Items = new ObservableCollection<ItemViewModel>{new ItemViewModel{source = "January", value = 25}, new ItemViewModel{source = "February", value = 35}}}, 
       new SeriesViewModel{type="Oranges",Items = new ObservableCollection<ItemViewModel>{new ItemViewModel{source = "January", value = 22}, new ItemViewModel{source = "February", value = 36}}} 
      } 

     }; 
    } 

} 

MainWindow.Xaml

<Grid> 
    <local:ExtendedChart ItemsSource="{Binding ChartSeriesViewModel.Series}" Margin="0,-38,0,97"> 
     <local:ExtendedChart.ItemTemplate> 
      <DataTemplate> 
       <chart:ColumnSeries ItemsSource="{Binding Items}" DependentValuePath="value" IndependentValuePath="source" Title="{Binding type}" /> 
      </DataTemplate> 
     </local:ExtendedChart.ItemTemplate> 
    </local:ExtendedChart> 
</Grid> 
+1

謝謝你的幫助Sushil,它的工作!標記 – Lacynt