Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 名称空间中不存在名称ViewModel";clr命名空间:Project.ViewModels“;_Wpf_Mvvm_Visual Studio 2012 - Fatal编程技术网

Wpf 名称空间中不存在名称ViewModel";clr命名空间:Project.ViewModels“;

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

这真是一个奇怪的错误。我正在开发一个WPF应用程序并遵循MVVM。在我的主窗口中,我正在设置视图和视图模型,我遇到了这个奇怪的错误。虽然它构建良好,应用程序运行良好,但我为什么会遇到这个错误

我也遵循了一些类似的规则,但没有找到合适的答案。我试图重新启动VisualStudio并进行清理和重建,但仍然面临此错误

这是代码

<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