在我的解决方案中,有一个项目有 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/