Вам нужно выбросить исключение вручную, используя ключевое слово 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;
}
Я думаю, что я столкнулся с тем, чтобы сначала создать View, и указал на ViewModel, который не существует. После этого я создаю ViewModel. Не удалось получить сообщение об ошибке, не удалось найти ViewModel.
Наконец, я заметил, что путь к вновь созданной странице просмотра указывал на каталог bin вместо каталога Views. Итак, я оставил ViewModel в покое. Удаленный и воссозданный вид снова. Щелкните правой кнопкой мыши и очистите проект, закройте все файлы, открытые в Solution, и перестроите. Это наконец исправило это.
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:
В своем классе кода добавьте следующее:
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>
И, когда вы запускаете, вы должны видеть все как положено:
Сделайте это, затем сравните рабочее решение с вашим проектом. Если вы не можете найти каких-либо различий, вам, вероятно, нужно просто отказаться от своего решения и начать все сначала. Скопируйте код, а не файлы, в новое решение.
В моем случае реализация 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 }
... перестроить проект
Ни один из других ответов не решил проблему для меня, но я в конечном итоге нашел ответ, который сделал. В моем случае из-за этой ошибки дизайнер пожаловался на неверную разметку (т.е. все работало нормально во время выполнения).
Я использовал ReSharper8, чтобы переименовать один из моих классов, на которые есть ссылки в XAML. Это вызвало другую совершенно другую ссылку на класс в том же XAML, чтобы иметь эту ошибку. Это сбивало с толку, потому что класс, вызвавший проблему, НЕ был тем же самым, что и ссылочный класс, отображающий ошибку.
В одном из других ответов указывалось, что данная ошибка может быть вызвана переименованием проекта, и единственный способ исправить это - удалить и повторно добавить этот проект. Точно так же я удалил и заново создал файл класса, который переименовал, и дизайнер снова начал работать.
Решение простое, просто закомментируйте ваш код DataType и скомпилируйте его сначала, раскомментируйте код обратно, затем проблема будет решена.
XAML-файл просто не может ссылаться на пространства имен, которые не были построены.
Этот связывал меня в течение нескольких часов.
У меня есть решение VS2015, которому уже несколько лет. На моем ноутбуке он прекрасно собирается, весь код проверяется в TFS, но когда я пытался собрать его на другом компьютере, я постоянно получал сообщение о том, что пространство имен не существует.
По сути, этот RepBaseWindow
является классом, унаследованным от класса WPF Window
, с несколькими дополнительными свистульками.
public class RepBaseWindow : Window
Я попробовал множество предложений здесь, но не повезло.
Ирония заключается в том, что, несмотря на это сообщение, если бы я щелкнул правой кнопкой мыши по этой ошибочной ссылке и выбрал «Просмотреть код», это с радостью привело бы меня в этот класс. Пространство имен было в порядке, класс был в порядке ... но WPF не был доволен этим.
Если бы я попытался использовать Intellisense для поиска пространства имен, я бы в итоге получил ту же разметку ... и те же ошибки сборки.
Я сравнил рабочую копию кода с версией TFS и понял проблему.
Мне нужно было вернуться к использованию старой копии файла WindowBase.dll
2012 года.
Смешно? ]
Я просто публикую этот ответ, чтобы показать, что иногда эти ошибки не имеют абсолютно никакого отношения к ошибочной разметке WPF или неправильно написанным именам пространства имен.
Надеюсь, это поможет.
Проверьте диспетчер конфигурации в Visual Studio. Убедитесь, что все проекты соответствуют платформе. Я хотел, чтобы платформа была x64, но мое основное приложение было настроено на AnyCPU. Установите это в x64, и это решило проблему.
Я прошел через это с Microsoft. В общем, ответ заключается в добавлении вашей выходной папки сборки в вашу переменную PATH.
Очевидно, что дизайнер в Visual Studio загружает библиотеки DLL и их зависимости. Когда он не может найти зависимость, он молча терпит неудачу, и вы получаете эти типы ошибок.
Добавление папки вывода сборки в мой PATH на самом деле не вариант, потому что я собираю несколько разных конфигураций, и все они идут в отдельные папки. Последнее, что мне нужно, чтобы столкнуться с какой-то странной проблемой, вызванной DLL, взятой из места, которое я не ожидал.
Редактировать: Извините. В спешке я должен был указать, что папка (и) для добавления в PATH - это папка (и), содержащая зависимые библиотеки DLL. В моем случае это папка вывода сборки, но это может быть не во всех случаях.
Я столкнулся с этой ошибкой, и проблема заключалась в том, что у меня в проекте был класс с тем же именем сборки, на которую я пытался ссылаться. Я изменил название класса, и это сработало.
Я столкнулся с этим, и мне было трудно проработать его, основываясь на ответах, размещенных на этом форуме. В какой-то момент я переименовал свой проект и ввел опечатку в автоматически сгенерированный файл AssemblyInfo.cs (в сборке: AssemblyTitle и Assembly: AssemblyProduct поля). Удивительно, но это была единственная ошибка компиляции, которую я получил в результате. Просто что-то неочевидное, чтобы перепроверить, если вы получаете эту ошибку, и предыдущие предложения не работают.
У меня была такая же проблема. Я использовал Intellisense для построения отображения пространства имен, и он не включал атрибут сборки, поэтому он выглядел так:
xmlns:converters="clr-namespace:XYZ.UI.Converters;
, когда я сравнивал его с рабочим поведением в другом окне, я заметил разницу , Когда я изменил его на
xmlns:converters="clr-namespace:XYZ.UI.Converters;assembly=XYZ.UI"
, очистил его и построил, это сработало.
Для нас это было просто, что проект Dll был установлен на Platform Target x64 в Visual Studio 2013. После установки его на Any . Все снова начинает работать.
Visual Studio ожидает, что пространства имен будут соответствовать расположению папок.
Чтобы решить вашу проблему, выйдите из Visual Studio и переименуйте папку вашего проекта в MyProject
. Затем запустите Visual Studio, удалите проект из решения, снова добавьте его как «существующий проект» и соберите проект, F6 kbd> или ctrl kbd> + shift kbd > + B kbd>
Если вы переименуете свое пространство имен после создания проекта, вы получите ошибки такого рода.
У меня была такая же проблема. У меня было правильное пространство имен, правильное имя класса, и я даже обновил PATH. Наконец, я извлек «DataType» из XAML, получил его для компиляции, добавил DataType, и он заработал. Похоже, это была проблема курицы и яйца. XAML не увидит его, пока он не будет скомпилирован, и вы не можете скомпилировать его в DataType. Итак, сначала создайте MV и скомпилируйте его. Затем добавьте в XAML.
Закройте и снова откройте Visual Studio.
Я попробовал некоторые из ответов здесь (я использую VS2012 с Resharper), и я делал все хорошо, но все еще имел ошибку. Я даже мог переходить к своим связанным полям, используя «cntl» + щелчок Resharper, но все еще получал ошибки компиляции XAML, и дизайнер не отображал представление проекта. Закрытие визуальной студии и повторное открытие исправили это для меня.
Перестройте свое решение (иногда чистое, а затем лучше работает). Затем посмотрите на свой список ошибок, прокрутите до самого конца, и он, скорее всего, укажет на ошибку, которая не позволяет вашей сборке скомпилироваться, и компилятор XAML, скорее всего, использует кэшированную версию сборки, а не новую, которую вы используете. хочу построить.
Эта ошибка возникает из-за того, что файл 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.
это сделано.