2015-02-21 4 views
5

Я хочу, чтобы мой пользовательский элемент управления отображал данные, когда я просматриваю его в дизайнере WPF в Visual Studio.Ошибка «Метод не найден» в дизайне XAML

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 кладет фигурную синюю линию под моим атрибутом d:DataContext, и в списке ошибок я вижу:

Ошибка 7 метод не найдено: Пустота ELabel.Manager.ViewModels.ELabelViewModel..ctor (ELabel.Manager.ViewModels.ControlPanelGridLine, ELabel.Control.ISerialPortFactory, ELabel.Data.IRepository, ELabel.ImageGeneration.IPriceLabelGenerator).

Моя интерпретация этого является то, что он находит TestData класса, а также найти TestData.ELabelViewModel собственности. Он просто не может разрешить конструктор, который вызывается внутри getter.

Почему он не может найти конструктор ELabelViewModel? Чтобы подтвердить, что мой код был в порядке, я сделал эту модель тестового представления фактическим контекстом данных, используя DataContext= вместо d:DataContext=. В этом случае я открыл приложение и подтвердил, что во время выполнения все работает так, как ожидалось: вызывается TestData.ELabelViewModel, инсайдер кода выполняет функцию геттера и использует эту модель представления. Просто разработчик не запускает код.

Класс ELabelViewModel находится в отдельной сборке под названием ELabel.Manager.ViewModels. Не удается ли редактору полностью загрузить эту сборку?

Позже Редактировать

Я попытался перенести этот TestData класс к ELabel.Manager.ViewModels сборки (то же сборки, что конструктор находится в). Разумеется, теперь он работает отлично, и я могу видеть тестовые данные при просмотре элемента управления в редакторе. Любопытно.

Я дважды проверил, что класс ELabelViewModel и конструктор являются общедоступными (это, конечно, так, иначе я бы никогда не смог создать приложение).

+0

Может быть, это был просто вопрос ссылок сборки, ваш статический класс был просто неизвестен, и там, возможно, причиной возвращения недействительным. –

+0

Lemme guess - дает ошибку дизайнеру, но он компилируется и работает нормально? Дизайнер все время делает это дерьмо. Просто проигнорируйте это. Надеюсь, это будет немного более надежным в 15-м. – Will

+0

@ Будет, это 15, и проблема все еще идет :) – usefulBee

ответ

0

я реализую все мои ViewModel классы так:

<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> 
Смежные вопросы