WPF:DataContext和ViewModel的问题

时间:2017-07-05 09:14:56

标签: c# wpf

我在程序中显示内容时出现问题,我怀疑我搞砸了与DataContext相关的内容。我使用的控件来自一个名为Syncfusion的扩展(用于显示图形),但它可以是显示这些项目的任何其他控件。

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"); } }
}

1 个答案:

答案 0 :(得分: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>