- Есть окно (основное представление), содержащее PlotView. .
- Имеется модель, содержащая коллекцию объектов. Каждый объект соответствует графику на моем графике.
- Существует модель представления, которая создает LineSeries и помещает ее в PlotModel.
Код: Выделить всё
public class MainViewModel : BaseViewModel
{
public PlotModel MyPlotModel { get; set; }
private MyModel model;
public MainViewModel()
{
model = new MyModel();
DrawGraphs();
}
private void DrawGraphs()
{
List myObjects = model.GetObjects();
foreach (var obj in myObjects)
{
var s = new LineSeries();
// Setting up datapoints and appearance of the graph
s.MouseDown += (object sender, OxyMouseDownEventArgs e) =>
{
var view = new ObjectView(); // A view with full information of this specific object
view.DataContext = new ObjectViewModel(obj); // View model uses the object as a parameter to do bindings for new view
view.ShowDialog();
};
MyPlotModel.Series.Add(s);
}
OnPropertyChanged("MyPlotModel");
}
}
Это работает меня устраивает, однако я сомневаюсь, что реализация соответствует MVVM. Модель представления не должна иметь возможности создавать новые представления. Но я не могу придумать лучшего решения. Есть ли более элегантный и MVVM-способ сделать это?
Подробнее здесь: https://stackoverflow.com/questions/788 ... n-mvvm-way