Wpf 名称空间中不存在名称ViewModel";clr命名空间:Project.ViewModels“;
这真是一个奇怪的错误。我正在开发一个WPF应用程序并遵循MVVM。在我的主窗口中,我正在设置视图和视图模型,我遇到了这个奇怪的错误。虽然它构建良好,应用程序运行良好,但我为什么会遇到这个错误 我也遵循了一些类似的规则,但没有找到合适的答案。我试图重新启动VisualStudio并进行清理和重建,但仍然面临此错误 这是代码Wpf 名称空间中不存在名称ViewModel";clr命名空间:Project.ViewModels“;,wpf,mvvm,visual-studio-2012,Wpf,Mvvm,Visual Studio 2012,这真是一个奇怪的错误。我正在开发一个WPF应用程序并遵循MVVM。在我的主窗口中,我正在设置视图和视图模型,我遇到了这个奇怪的错误。虽然它构建良好,应用程序运行良好,但我为什么会遇到这个错误 我也遵循了一些类似的规则,但没有找到合适的答案。我试图重新启动VisualStudio并进行清理和重建,但仍然面临此错误 这是代码 <Window x:Class="MyProject.MainWindow" xmlns="http://schemas.microsoft.com/wi
<Window x:Class="MyProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:v="clr-namespace:MyProject.Views"
xmlns:vm="clr-namespace:MyProject.ViewModels"
xmlns:p="clr-namespace:MyProject.Properties"
Title="{x:Static p:Resources.Title}" Height="400" Width="750" MinHeight="400" MinWidth="750">
<Window.Resources>
<DataTemplate DataType="{x:Type vm:MainPageViewModel}">
<v:MainPageView/>
</DataTemplate>
</Window.Resources>
Error 1 The name "MainPageViewModel" does not exist in the namespace "clr-namespace:MyProject.ViewModels".
那么什么是真正的错误呢。顺便说一下,我正在使用Visual Studio 2012
更新:
我的视图模型和视图位于同一项目中。我没有提到任何其他项目。并且存在MyProject.ViewModels.MainPageViewModel
clr命名空间:MyProject.ViewModels
必须有一个名为MyProject.ViewModels
的命名空间,它有一个名为MainPageViewModel
的类,该类是公共的,并且在与ProjectDatabaseRebuilder.MainWindow
相同的程序集中有一个公共的无参数构造函数
没有
如果引用的程序集中存在MyProject.ViewModels
,则必须在xmlns中声明
xmlns:vm="clr-namespace:MyProject.ViewModels;assembly=MyProject"
或者类似的。老实说,看起来您复制了某人的示例,却没有意识到这些专门的xml名称空间在WPF中是如何工作的
有些事情告诉我最终的答案如下:xmlns:vm=“clr namespace:ProjectDatabaseRebuilder.ViewModels”
请注意,“名称空间”和(如上)“程序集”表示名称空间和程序集,xaml反序列化程序在运行时使用此信息定位类型。如果他们不正确,事情就不会发生
这是微不足道的。你的项目一定做了一些奇怪的事情,这可能需要你从头开始。或者,你可以按照我下面的指南做一个新的项目,然后一点一点地与你的项目进行比较,看看哪里出了问题 首先,创建一个名为MyWpfApplication的新WPF应用程序 添加视图文件夹和视图模型文件夹。添加显示的VM代码类和view 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>
而且,运行时,您应该可以按预期看到所有内容:
执行此操作,然后将工作解决方案与您的项目进行比较。如果你找不到任何不同,你可能需要放弃你的解决方案,重新开始。将代码而不是文件复制到新的解决方案中。我已经与Microsoft讨论过这个问题。总之,答案是将生成输出文件夹添加到路径中 显然,VisualStudio中的设计器加载DLL及其依赖项。当它找不到依赖项时,它会以静默方式失败,您会得到这些类型的错误 在我的例子中,将生成输出文件夹添加到我的路径并不是一个真正的选项,因为我生成了几个不同的配置,它们都转到不同的文件夹。最后一件事是,我需要遇到一些奇怪的问题,这些问题是由从一个我没有预料到的位置提取DLL引起的
编辑:对不起。在匆忙中,我应该指出要添加到路径的文件夹是包含依赖DLL的文件夹。在我的例子中,这是生成输出文件夹,但并非在所有情况下都是如此。Visual Studio希望名称空间与文件夹位置匹配。
要解决您的问题,请退出Visual Studio并将项目文件夹重命名为
MyProject
。然后启动VisualStudio,从解决方案中删除该项目,再次将其添加为“现有项目”,并使用F6或ctrl+shift+B构建该项目
如果在创建项目后重命名名称空间,则会出现此类错误。重建解决方案(有时“先清理后构建”效果更好)。然后查看错误列表,滚动到最底部,它很可能指示不允许编译程序集的错误,并且XAML编译器很可能使用程序集的缓存版本,而不是您要生成的新版本。关闭并重新打开Visual Studio
我在这里尝试了一些答案(我正在使用VS2012和Resharper),我做的一切都很好,但仍然有错误。我甚至可以使用Resharper的“cntl”+单击导航到绑定字段,但仍然会出现XAML编译错误,并且designer不会显示设计视图。关闭visual studio并重新打开为我修复了它 我遇到了这个错误,问题是项目中有一个类与我试图引用的程序集同名。我更改了类名,它成功了。我也遇到了同样的问题。我有正确的名称空间,正确的类名,甚至更新了路径。最后,我从XAML中取出“数据类型”,让它进行编译,然后重新添加数据类型,它就工作了。看起来这是个鸡和蛋的问题。XAML直到在中编译后才会看到它,您不能在数据类型中使用它进行编译。
因此,首先创建MV并编译它。然后,添加到XAML。我也遇到了同样的问题。我曾使用Intellisense构建名称空间映射,但它没有包含assembly属性,因此看起来像这样:
xmlns:converters="clr-namespace:XYZ.UI.Converters;
当我将它与另一个窗口中的工作行为进行比较时,我发现了差异。当我把它改成
xmlns:converters="clr-namespace:XYZ.UI.Converters;assembly=XYZ.UI"
清理它并构建它,它就成功了。我遇到了这个问题,根据论坛上发布的答案,我很难解决这个问题。我在某个时候重命名了我的项目,并在自动生成的AssemblyInfo.cs文件(在assembly:AssemblyTitle和assembly:AssemblyProduct字段中)中引入了一个输入错误。令人惊讶的是,这是我得到的唯一编译错误。只是有点不明显
xmlns:converters="clr-namespace:XYZ.UI.Converters;assembly=XYZ.UI"
<!-- <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>
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 }
public class RepBaseWindow : Window