Я хочу, чтобы мой пользовательский элемент управления отображал данные, когда я просматриваю его в дизайнере 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
и конструктор являются общедоступными (это, конечно, так, иначе я бы никогда не смог создать приложение).
Может быть, это был просто вопрос ссылок сборки, ваш статический класс был просто неизвестен, и там, возможно, причиной возвращения недействительным. –
Lemme guess - дает ошибку дизайнеру, но он компилируется и работает нормально? Дизайнер все время делает это дерьмо. Просто проигнорируйте это. Надеюсь, это будет немного более надежным в 15-м. – Will
@ Будет, это 15, и проблема все еще идет :) – usefulBee