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 с этой структурой, возможно ли это?
Да, я прочитал темы, вопросы и примеры, но просто стал более неуверенным после прочтения нескольких неопределенных мнений остранный, нарушающий правила вложенный вид волшебный материал.