Реализация Oxyplot в WPF с MVVM - Вложенные представления? - PullRequest
0 голосов
/ 22 октября 2018

tl; dr см. Нижнюю строку , я просто опишу мою структуру и реализацию MVVM здесь:

Я на самом деле пытаюсь реализовать график Oxyplot в моем существующем приложении WPF, но я застрял на том, как правильно его встраивать.Я начал работать с использованием класса Plotmodel, предоставляемого платформой непосредственно в XAML / codebehind, однако это выглядит не очень чисто и привело к некоторым проблемам с привязкой и инкапсуляцией данных.

Они предоставляют несколько примеров и docs относительно WPF / MVVM, где они используют подход Viewmodel - это приводит к моей конкретной проблеме:

В моем приложении я использую Shell View / VM, подобную этой, с хостом ContentControl, который содержитдругие виды (только соответствующие части):

ApplicationView.xaml

<Window x:Class="MyApp.Views.ApplicationView"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:vm="clr-namespace:MyApp.ViewModels"
   xmlns:v="clr-namespace:MyApp.Views">

 <Window.Resources>
     <DataTemplate DataType="{x:Type vm:HomeViewModel}">
         <v:HomeView />
     </DataTemplate>
     <DataTemplate DataType="{x:Type vm:DataInputViewModel}">
         <v:DataInputView />
     </DataTemplate>
 </Window.Resources>

 <ContentControl BorderThickness="10" BorderBrush="#444444" Grid.Row="0" Grid.ColumnSpan="3" Content="{Binding CurrentPageViewModel}"/>

 // Other control elements, e.g. for navigation through the Views
</Window>

В соответствующем ApplicationViewModel.cs я переключаю активные ViewModels.Только основные вещи в App.xaml.cs, спец.инициализация:

App.xaml.cs

namespace MyApp
{

  public partial class App : Application
  {
      protected override void OnStartup(StartupEventArgs e)
      {
          base.OnStartup(e);

          Views.ApplicationView app = new Views.ApplicationView();
          ViewModels.ApplicationViewModel context = new ViewModels.ApplicationViewModel();
          app.DataContext = context;
          app.Show();
      }
  }

}

Теперь я хочу встроить элемент управления Oxyplot в определенный SubView, который настроенкак это:

ExampleView.xaml

<UserControl x:Class="MyApp.Views.ExampleView"
             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:hc="clr-namespace:MyApp.HelperClasses"
             xmlns:oxy="http://oxyplot.org/wpf"
             mc:Ignorable="d">

//much of elements and stuff binding to ExampleViewModel.cs

Однако я не уверен, как встроить сюда элемент управления, который привязывается к Oxyplot.В упомянутых выше документах они объясняют базовую интеграцию через макет MVVM, настраивая собственный View и ViewModel. Это заставляет меня задуматься о том, возможно ли (и это не плохая практика !?) встроить другое представление с его собственной моделью представления в это представление.Если это так: как вы переключаете DataContext с этой структурой, возможно ли это?

Да, я прочитал темы, вопросы и примеры, но просто стал более неуверенным после прочтения нескольких неопределенных мнений остранный, нарушающий правила вложенный вид волшебный материал.

...