3

我有一个非常简单的 WPF 测试应用程序,具有以下布局 ViewModels --DialogViewModel --GraphViewModel Views --DialogView --GraphView

DialogViewModel 有这个代码:

public class DialogViewModel : Screen {
    #region Graph
    private GraphViewModel m_gvmGraph;
    public GraphViewModel Graph {
        get {
            if(m_gvmGraph == null) {
                m_gvmGraph = new GraphViewModel();
            }
            return m_gvmGraph;
        }
        set {
            if(m_gvmGraph != value) {
                m_gvmGraph = value;
                NotifyOfPropertyChange("Graph");
            }
        }
    }
    #endregion

    public DialogViewModel() {
        DisplayName = "Graph Dialog";
    }

GraphViewModel 没有代码。

DialogView (UserControl) 看起来像这样:

d:DataContext="{d:DesignInstance Type=VMs:DialogViewModel, IsDesignTimeCreatable=True}"
Cal:Bind.AtDesignTime="True"
Width="1000" Height="600">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="200"/>
    </Grid.ColumnDefinitions>
    <ContentControl x:Name="Graph"  />
</Grid>

GraphView (UserControl) 看起来像这样:

    d:DataContext="{d:DesignInstance Type=VMs:GraphViewModel, IsDesignTimeCreatable=True}"
Cal:Bind.AtDesignTime="True"
d:DesignHeight="600" d:DesignWidth="800">
<Grid>
    <Grid>
        <Grid>
            <TextBlock Text="Test" />
        </Grid>
    </Grid>
</Grid>

(我稍后需要嵌套网格 - 在这里没关系)。

这在运行时按预期工作(查看负载等)。所以我想(大多数)做得对。

但是在设计时(当我打开 GraphView.xaml 时,我得到“找不到 XXXX.ViewModels.GraphViewModel 的视图。”

我错过了什么?

4

1 回答 1

3

我以前研究过这个。我用 CM 源打开了一个 VS,用项目源打开了一个 VS。使用具有 CM 源的 VS,我会将项目附加到另一个 VS。然后在VS中加上项目,打开视图。

如果我没记错的话,在设计时,SelectAssemblies集合不包含包含视图和视图模型的程序集。

我相信我最终SelectAssemblies在引导程序中覆盖了方法,如果这Execute.IsInDesignMode是真的,添加包含视图和视图模型的程序集,即使它是主/唯一程序集。

于 2013-03-11T15:04:49.437 回答