Имя ViewModel не существует в пространстве имен & ldquo; clr-namespace: Project.ViewModels & rdquo;

Вам нужно выбросить исключение вручную, используя ключевое слово throw.

Пример:

#include <iostream>
using namespace std;

double division(int a, int b)
{
   if( b == 0 )
   {
      throw "Division by zero condition!";
   }
   return (a/b);
}

int main ()
{
   int x = 50;
   int y = 0;
   double z = 0;

   try {
     z = division(x, y);
     cout << z << endl;
   }catch (const char* msg) {
     cerr << msg << endl;
   }

   return 0;
}
29
задан fhnaseer 11 June 2013 в 05:03
поделиться

17 ответов

Я думаю, что я столкнулся с тем, чтобы сначала создать View, и указал на ViewModel, который не существует. После этого я создаю ViewModel. Не удалось получить сообщение об ошибке, не удалось найти ViewModel.

Наконец, я заметил, что путь к вновь созданной странице просмотра указывал на каталог bin вместо каталога Views. Итак, я оставил ViewModel в покое. Удаленный и воссозданный вид снова. Щелкните правой кнопкой мыши и очистите проект, закройте все файлы, открытые в Solution, и перестроите. Это наконец исправило это.

0
ответ дан ekgcorp 11 June 2013 в 05:03
поделиться

clr-namespace: MyProject.ViewModels

Должно быть пространство имен с именем MyProject.ViewModels, которое имеет класс Called MainPageViewModel, который является открытым и имеет открытый конструктор без параметров внутри та же сборка, что и ProjectDatabaseRebuilder.MainWindow.

Нет.

Если MyProject.ViewModels существует в ссылочной сборке, вы должны указать это в xmlns.

xmlns:vm="clr-namespace:MyProject.ViewModels;assembly=MyProject"

или что-то подобное. Честно говоря, похоже, что вы скопировали чей-то пример, не понимая, как эти специализированные пространства имен xml работают в WPF.

Что-то подсказывает мне, что окончательный ответ будет следующим: xmlns:vm="clr-namespace:ProjectDatabaseRebuilder.ViewModels".

Обратите внимание, что «пространство имен» и (как указано выше) «сборка» означают пространства имен и сборки, и десериализатор xaml использует эту информацию для поиска типов во время выполнения. Если они неверны, вещи не будут работать.


Это тривиально. Вы, должно быть, сделали что-то странное с вашим проектом, что может потребовать, чтобы вы начали с нуля. Или вы можете создать новый проект, следуя моему руководству ниже, а затем сравнить его по частям с вашим, чтобы увидеть, где вы ошиблись.

Сначала создайте новое приложение WPF под названием MyWpfApplication.

Добавить папку для Views и одну для ViewModels. Добавьте показанный класс кода VM и просмотрите UserControl:

enter image description here

В своем классе кода добавьте следующее:

namespace MyWpfApplication.ViewModels
{
    class MainWindowViewModel
    {
        public string Text { get; set; }

        public MainWindowViewModel()
        {
            Text = "It works.";
        }
    }
}

Ваше представление также просто:

<UserControl
    x:Class="MyWpfApplication.Views.MainWindowView"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    <Grid>
        <TextBlock
            Text="{Binding Text}"
            HorizontalAlignment="Center"
            VerticalAlignment="Center" />
    </Grid>
</UserControl>

И, в своем Окне, делайте, по сути, то, что вы пытаетесь сделать:

<Window
    x:Class="MyWpfApplication.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:v="clr-namespace:MyWpfApplication.Views"
    xmlns:vm="clr-namespace:MyWpfApplication.ViewModels"
    Title="DERP"
    Content="{Binding DataContext, RelativeSource={RelativeSource Self}}">
    <Window.Resources>
        <DataTemplate
            DataType="{x:Type vm:MainWindowViewModel}">
            <v:MainWindowView />
        </DataTemplate>
    </Window.Resources>
    <Window.DataContext>
        <vm:MainWindowViewModel />
    </Window.DataContext>
</Window>

И, когда вы запускаете, вы должны видеть все как положено:

enter image description here

Сделайте это, затем сравните рабочее решение с вашим проектом. Если вы не можете найти каких-либо различий, вам, вероятно, нужно просто отказаться от своего решения и начать все сначала. Скопируйте код, а не файлы, в новое решение.

33
ответ дан Will 11 June 2013 в 05:03
поделиться

В моем случае реализация IValueConverter была проблемой

Я изменил:

public object Convert(object value, 
  Type targetType, 
  object parameter, 
  string language) 
{ //code }

на

public object Convert(object value, 
  Type targetType, 
  object parameter, 
  System.Globalization.CultureInfo culture) 
{ //code } 

... перестроить проект

0
ответ дан Dariusz Filipiak 11 June 2013 в 05:03
поделиться

Ни один из других ответов не решил проблему для меня, но я в конечном итоге нашел ответ, который сделал. В моем случае из-за этой ошибки дизайнер пожаловался на неверную разметку (т.е. все работало нормально во время выполнения).

Я использовал ReSharper8, чтобы переименовать один из моих классов, на которые есть ссылки в XAML. Это вызвало другую совершенно другую ссылку на класс в том же XAML, чтобы иметь эту ошибку. Это сбивало с толку, потому что класс, вызвавший проблему, НЕ был тем же самым, что и ссылочный класс, отображающий ошибку.

В одном из других ответов указывалось, что данная ошибка может быть вызвана переименованием проекта, и единственный способ исправить это - удалить и повторно добавить этот проект. Точно так же я удалил и заново создал файл класса, который переименовал, и дизайнер снова начал работать.

1
ответ дан bugged87 11 June 2013 в 05:03
поделиться

Решение простое, просто закомментируйте ваш код DataType и скомпилируйте его сначала, раскомментируйте код обратно, затем проблема будет решена.

XAML-файл просто не может ссылаться на пространства имен, которые не были построены.

1
ответ дан Hunter Hsieh 11 June 2013 в 05:03
поделиться

Этот связывал меня в течение нескольких часов.

У меня есть решение VS2015, которому уже несколько лет. На моем ноутбуке он прекрасно собирается, весь код проверяется в TFS, но когда я пытался собрать его на другом компьютере, я постоянно получал сообщение о том, что пространство имен не существует.

Bad Namespace

По сути, этот RepBaseWindow является классом, унаследованным от класса WPF Window, с несколькими дополнительными свистульками.

public class RepBaseWindow : Window

Я попробовал множество предложений здесь, но не повезло.

Ирония заключается в том, что, несмотря на это сообщение, если бы я щелкнул правой кнопкой мыши по этой ошибочной ссылке и выбрал «Просмотреть код», это с радостью привело бы меня в этот класс. Пространство имен было в порядке, класс был в порядке ... но WPF не был доволен этим.

Если бы я попытался использовать Intellisense для поиска пространства имен, я бы в итоге получил ту же разметку ... и те же ошибки сборки.

Я сравнил рабочую копию кода с версией TFS и понял проблему.

Мне нужно было вернуться к использованию старой копии файла WindowBase.dll 2012 года.

Смешно? ]

Я просто публикую этот ответ, чтобы показать, что иногда эти ошибки не имеют абсолютно никакого отношения к ошибочной разметке WPF или неправильно написанным именам пространства имен.

Надеюсь, это поможет.

1
ответ дан Mike Gledhill 11 June 2013 в 05:03
поделиться

Проверьте диспетчер конфигурации в Visual Studio. Убедитесь, что все проекты соответствуют платформе. Я хотел, чтобы платформа была x64, но мое основное приложение было настроено на AnyCPU. Установите это в x64, и это решило проблему.

4
ответ дан Greg Osborne 11 June 2013 в 05:03
поделиться

Я прошел через это с Microsoft. В общем, ответ заключается в добавлении вашей выходной папки сборки в вашу переменную PATH.

Очевидно, что дизайнер в Visual Studio загружает библиотеки DLL и их зависимости. Когда он не может найти зависимость, он молча терпит неудачу, и вы получаете эти типы ошибок.

Добавление папки вывода сборки в мой PATH на самом деле не вариант, потому что я собираю несколько разных конфигураций, и все они идут в отдельные папки. Последнее, что мне нужно, чтобы столкнуться с какой-то странной проблемой, вызванной DLL, взятой из места, которое я не ожидал.

Редактировать: Извините. В спешке я должен был указать, что папка (и) для добавления в PATH - это папка (и), содержащая зависимые библиотеки DLL. В моем случае это папка вывода сборки, но это может быть не во всех случаях.

2
ответ дан JAB 11 June 2013 в 05:03
поделиться

Я столкнулся с этой ошибкой, и проблема заключалась в том, что у меня в проекте был класс с тем же именем сборки, на которую я пытался ссылаться. Я изменил название класса, и это сработало.

1
ответ дан bsguedes 11 June 2013 в 05:03
поделиться

Я столкнулся с этим, и мне было трудно проработать его, основываясь на ответах, размещенных на этом форуме. В какой-то момент я переименовал свой проект и ввел опечатку в автоматически сгенерированный файл AssemblyInfo.cs (в сборке: AssemblyTitle и Assembly: AssemblyProduct поля). Удивительно, но это была единственная ошибка компиляции, которую я получил в результате. Просто что-то неочевидное, чтобы перепроверить, если вы получаете эту ошибку, и предыдущие предложения не работают.

1
ответ дан Elemental Pete 11 June 2013 в 05:03
поделиться

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

xmlns:converters="clr-namespace:XYZ.UI.Converters;

, когда я сравнивал его с рабочим поведением в другом окне, я заметил разницу , Когда я изменил его на

xmlns:converters="clr-namespace:XYZ.UI.Converters;assembly=XYZ.UI"

, очистил его и построил, это сработало.

4
ответ дан user2871239 11 June 2013 в 05:03
поделиться

Для нас это было просто, что проект Dll был установлен на Platform Target x64 в Visual Studio 2013. После установки его на Any . Все снова начинает работать.

4
ответ дан lanwin 11 June 2013 в 05:03
поделиться

Visual Studio ожидает, что пространства имен будут соответствовать расположению папок.
Чтобы решить вашу проблему, выйдите из Visual Studio и переименуйте папку вашего проекта в MyProject. Затем запустите Visual Studio, удалите проект из решения, снова добавьте его как «существующий проект» и соберите проект, F6 или ctrl + shift + B

Если вы переименуете свое пространство имен после создания проекта, вы получите ошибки такого рода.

21
ответ дан mtfurlan 11 June 2013 в 05:03
поделиться

У меня была такая же проблема. У меня было правильное пространство имен, правильное имя класса, и я даже обновил PATH. Наконец, я извлек «DataType» из XAML, получил его для компиляции, добавил DataType, и он заработал. Похоже, это была проблема курицы и яйца. XAML не увидит его, пока он не будет скомпилирован, и вы не можете скомпилировать его в DataType. Итак, сначала создайте MV и скомпилируйте его. Затем добавьте в XAML.

16
ответ дан Dan Hewett 11 June 2013 в 05:03
поделиться

Закройте и снова откройте Visual Studio.

Я попробовал некоторые из ответов здесь (я использую VS2012 с Resharper), и я делал все хорошо, но все еще имел ошибку. Я даже мог переходить к своим связанным полям, используя «cntl» + щелчок Resharper, но все еще получал ошибки компиляции XAML, и дизайнер не отображал представление проекта. Закрытие визуальной студии и повторное открытие исправили это для меня.

5
ответ дан Gordon Slysz 11 June 2013 в 05:03
поделиться

Перестройте свое решение (иногда чистое, а затем лучше работает). Затем посмотрите на свой список ошибок, прокрутите до самого конца, и он, скорее всего, укажет на ошибку, которая не позволяет вашей сборке скомпилироваться, и компилятор XAML, скорее всего, использует кэшированную версию сборки, а не новую, которую вы используете. хочу построить.

9
ответ дан John C 11 June 2013 в 05:03
поделиться

Эта ошибка возникает из-за того, что файл xaml ссылается на не построенное пространство имен.

Мое решение [в 3 этапа]:

1- Прокомментируйте проблемный файл [ы] и замените его пустой версией. Например, для вас:

<!-- <Window ...> </Window> -->  <!--you orginal xaml code!, uncomment later-->

<Window                          <!-- temp xaml code, remove later -->
    x:Class="MyProject.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
</Window>

2- Очистите и перестройте проект / решение.

3-Раскомментируйте оригинальный код xaml и удалите временный код xaml.

это сделано.

4
ответ дан kokabi 11 June 2013 в 05:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: