XAML设计器中出现“找不到方法”错误

5
我希望我的用户控件在Visual Studio的WPF设计器中查看时能够显示数据。
ViewModel没有默认构造函数,所以我编写了自己的静态TestData类来构建模型及其所有依赖项。
public static class TestData
{
    public static ELabelViewModel ELabelViewModel
    {
        get
        {
            return new ELabelViewModel
            (
                new ControlPanelGridLine(TestData.ELabel),
                new SerialPortFactoryImpl(),
                new Repository(),
                new PriceLabelGenerator(TestData.IPriceLabelViewModelFactory)
            );
        }
    }

    // Other static getter methods

这些代码没有任何问题。但是,当我将以下内容添加到XAML中时,问题就开始了:
   d:DataContext="{x:Static local:TestData.ELabelViewModel}"

XAML编辑器在我的属性下放置了一个蓝色的波浪线,错误列表中显示:
"Error 7 Method not found: 'Void ELabel.Manager.ViewModels.ELabelViewModel..ctor(ELabel.Manager.ViewModels.ControlPanelGridLine, ELabel.Control.ISerialPortFactory, ELabel.Data.IRepository,ELabel.ImageGeneration.IPriceLabelGenerator)'."
我的理解是它找到了类,并找到了属性。只是无法解析在getter函数中调用的构造函数。
为什么它无法找到构造函数?为了确认我的代码是正确的,我使用DataContext=而不是,将此测试视图模型作为实际数据上下文。在这种情况下,我打开了应用程序并确认,在运行时,一切都按预期工作:被调用,getter函数中的代码运行并使用此视图模型。只是设计器无法运行代码。 类在一个名为的单独程序集中。编辑器是否无法完全加载此程序集?
稍后编辑:
我尝试将此类移动到程序集中(与构造函数相同的程序集)。确实,它现在正常工作了,我可以看到在编辑器中查看控件时的测试数据。奇怪。
我已经反复检查类和构造函数是否为public(当然是,否则我就无法构建应用程序)。

也许这只是一个程序集引用的问题,你的静态类可能是未知的,因此可能导致了 void 返回。 - Kevin Avignon
让我猜猜——在设计器中会出现错误,但编译和运行都没问题?设计器经常会出现这种鬼畜问题。不用理它,希望在2015年的版本中会更加可靠。 - user1228
1个回答

1
我把所有的视图模型类都像这样实现:

<UserControl x:Class="MyApp.Views.MainView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:vm="clr-namespace:MyApp.ViewModel"
             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" 
             mc:Ignorable="d" Height="607" Width="616">

    <UserControl.DataContext>
        <vm:TestData/>
    </UserControl.DataContext>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接