Привязка контекста данных для просмотра с помощью DesignInstance

В моем решении есть один проект с 2 папками: ViewModels и Views. Папка ViewModels состоит из файла MainViewModel и 3 папок с другими моделями представления, пусть они будут VM1, VM2 и VM3. Папка Views состоит из файла MainView и 3 папок с другими видами, пусть они будут V1, V2 и V3.

Идея состоит в том, чтобы поместить TabControl с 3 элементами табуляции с каждым представлением в MainView.

У меня есть некоторые проблемы с пространствами имен:

VM1:

namespace UPR.ViewModels
{
    public class VM1
    {
        public VM1()
        {

        }
    }
}

V1.xaml.cs:

namespace UPR.Views
{
    public partial class V1 : UserControl
    {
        public V1()
        {
            InitializeComponent();
        }
    }

}

V1.xaml:

<UserControl x:Class="UPR.Views.V1"
         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:ViewModels="clr-namespace:UPR.ViewModels"
         mc:Ignorable="d" 
         d:DesignHeight="450" d:DesignWidth="800"
         DataContext="{d:DesignInstance ViewModels:VM1}">
<Grid>
    <StackPanel></StackPanel>
</Grid>

MainView.xaml:

<UserControl x:Class="UPR.Views.MainView"
         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:Views="clr-namespace:UPR.Views"
         xmlns:ViewModels="clr-namespace:UPR.ViewModels"
         xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core" 
         mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"
         DataContext="{d:DesignInstance ViewModels:MainViewModel}">

<Grid>
    <dx:DXTabControl Grid.Row="0">
        <dx:DXTabItem x:Name="xV1Tab">
            <dx:DXTabItem.Header>
                <TextBlock Text="V1 tab" FontSize="14"/>
            </dx:DXTabItem.Header>
            <Views:MonitoringView DataContext="{Binding V1Content}"/>
        </dx:DXTabItem>

        <dx:DXTabItem x:Name="xV2Tab">
            <dx:DXTabItem.Header>
                <TextBlock Text="V2 tab" FontSize="14"/>
            </dx:DXTabItem.Header>
            <Views:DetailsView DataContext="{Binding V2Content}"/>
        </dx:DXTabItem>

        <dx:DXTabItem x:Name="xV3Tab">
            <dx:DXTabItem.Header>
                <TextBlock Text="V3 tab" FontSize="14"/>
            </dx:DXTabItem.Header>
            <Views:NewTasksView DataContext="{Binding V3Content}"/>
        </dx:DXTabItem>
    </dx:DXTabControl>
</Grid>

Проект даже не компилируется из-за двух видов ошибок:

1 - VM1 не существует в пространстве имен "clr-namespace: ViewModels"

2 - тег «DesignInstance» не существует в пространстве имен XML « http://schemas.microsoft.com/expression/blend/2008 »

Эти ошибки также относятся к другим представлениям и моделям представления (VM2, VM3, V2, V3, MainVM, MainV).

Похоже, это отставание. Потому что, когда я пишу «ViewModels:» - IntelliSense предлагает мне список моделей представления по этому пути. Когда я пишу «d:», IntelliSense предлагает мне написать «d: DesignInstance».

Есть идеи, как это решить? Может быть, я должен что-то сделать с пространствами имен или структурой проекта?

Всего 1 ответ


Чтобы добавить к комментарию, иногда не требуется, чтобы данные загружались во время разработки, затем при необходимости используйте IsDesignTimeCreatable :

d:DataContext="{d:DesignInstance vm:Episode, d:IsDesignTimeCreatable=False}"

В других случаях можно получить фиктивные данные, которые нужно подключить, а затем настроить статические данные:

d:DataContext="{x:Static local:MockDataSource.VM1}"

Есть идеи?

10000