c# - 使用 DesignInstance 将数据上下文绑定(bind)到 View

标签 c# wpf visual-studio xaml mvvm

在我的解决方案中,有一个项目有 2 个文件夹:ViewModels 和 Views。 ViewModels 文件夹由 MainViewModel 文件和 3 个与其他 View 模型组成的文件夹组成,分别为 VM1、VM2 和 VM3。 Views 文件夹由 MainView 文件和 3 个其他 View 文件夹组成,分别为 V1、V2 和 V3。

这个想法是将 TabControl 与 MainView 上的每个 View 一起放置 3 个选项卡项。

我对命名空间有一些问题:

虚拟机1:

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 - 命名空间“clr-namespace:ViewModels”中不存在 VM1

2 - 命名空间 XML“http://schemas.microsoft.com/expression/blend/2008”中不存在标记“DesignInstance”

这些错误也适用于其他 View 和 View 模型(VM2、VM3、V2、V3、MainVM、MainV)。

好像是滞后了。因为当我编写“ViewModels:”时 - IntelliSense 通过该路径为我提供了 View 模型列表。当我写“d:”时,IntelliSense 让我写“d:DesignInstance”。

任何想法,如何解决这个问题?可能我应该对命名空间或项目结构做一些事情吗?

最佳答案

要添加到评论中,有时不希望在设计时加载数据,然后使用 IsDesignTimeCreatable如所须:

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

有时可能有一个想要连接的模拟数据,然后设置静态数据:
d:DataContext="{x:Static local:MockDataSource.VM1}"

关于c# - 使用 DesignInstance 将数据上下文绑定(bind)到 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60149837/

相关文章:

wpf - 如何组合多个 IObservable<bool> 形成复合 bool 订阅值

.net - RichTextbox SelectionStart 返回错误的索引

c++ - "CoInitialize failed"当一个函数(来自库)包含在 VC++ MFC 项目中时

c# - 仅返回数据 GridView 的更改行?

c# - EF Core - 添加唯一索引

wpf - 等到控件布局完成

c# - 如何添加到 Visual Studio 错误列表窗口中的消息列表?

c# - VS 2015 : C# NuGet Package restore failed. 文件或目录损坏无法读取

c# - ASP.NET Web API 方法模型 null

c# - 将 ProcessStartInfo.WorkingDirectory 设置为 UNC 路径