C# Viewmodel没有';名称空间中不存在

C# Viewmodel没有';名称空间中不存在,c#,wpf,datacontext,inotifypropertychanged,inheriting-constructors,C#,Wpf,Datacontext,Inotifypropertychanged,Inheriting Constructors,我很抱歉,如果这是一个愚蠢的问题,或者甚至不符合我的要求,但我是WPF的新手,我似乎无法掌握它的窍门。现在我正在做一些类似的事情,我遇到了一个问题。当我尝试执行代码时: namespace DPS_Calculator_Prototype { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWind

我很抱歉,如果这是一个愚蠢的问题,或者甚至不符合我的要求,但我是WPF的新手,我似乎无法掌握它的窍门。现在我正在做一些类似的事情,我遇到了一个问题。当我尝试执行代码时:

namespace DPS_Calculator_Prototype
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow() {
            InitializeComponent();
            }
    }
    public class NotifyPropertyChanged : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        public void RaisePropertyChange(string propertyName) {
            PropertyChanged?.Invoke(this, new 
PropertyChangedEventArgs(propertyName));
        }
    }


        public class Calculator: NotifyPropertyChanged
        {
            private string _damage;
            public string Damage {
                get { return _damage; }
                set {
                    _damage = value;
                    RaisePropertyChange("Damage");
                }
            }
        }

    namespace UseOf_INotifyPropertyChanged
    {
        public class MainWindowViewModel : Calculator
        {
            public MainWindowViewModel() {
                Damage = "7";
            }
        }
    }
}
名称空间DPS\u计算器\u原型
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
公共主窗口(){
初始化组件();
}
}
公共类NotifyPropertyChanged:INotifyPropertyChanged
{
公共事件属性更改事件处理程序属性更改;
public void RaisePropertyChange(字符串propertyName){
PropertyChanged?调用(此,新
PropertyChangedEventArgs(propertyName));
}
}
公共类计算器:NotifyPropertyChanged
{
私人字符串损坏;
公共弦损坏{
获取{return\u damage;}
设置{
_损害=价值;
提高产权变更(“损害”);
}
}
}
_INotifyPropertyChanged的命名空间使用
{
公共类MainWindowViewModel:计算器
{
公共主窗口视图模型(){
损坏=“7”;
}
}
}
}
我收到以下错误:“命名空间“DPS\u Calculator\u Prototype.UseOf\u INotifyPropertyChanged”中不存在类型或命名空间名称“ViewModel”。(是否缺少程序集引用?) 及 名称“MainWindowViewModel”在命名空间“clr命名空间:DPS\u Calculator\u Prototype.UseOf\u INotifyPropertyChanged.ViewModel”中不存在 和 “找不到类型‘VM:MainWindowViewModel’。请验证您是否缺少程序集引用,以及是否已生成所有引用的程序集。” 我两次收到第一个错误,一次在MainWindow.g.cs中,另一次在MainWindow.xaml中。其他两个都在MainWindow.XAML中,如果有人能告诉我我做错了什么,那就太好了。以下是XAML文件:

<Window x:Class="DPS_Calculator_Prototype.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:VM="clr-namespace:DPS_Calculator_Prototype.UseOf_INotifyPropertyChanged.ViewModel"
    xmlns:local="clr-namespace:DPS_Calculator_Prototype"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">

    <Window.DataContext>
        <VM:MainWindowViewModel x:Name="VMMainWindow">
        </VM:MainWindowViewModel>
    </Window.DataContext>

    <Grid>
        <TextBox HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" 
         Text="{Binding Damage}" VerticalAlignment="Top" Width="120" 
         Margin="78,28,0,0" TextChanged="TextBox_TextChanged"/>
    </Grid>
</Window>

我只是尝试使用不同的名称空间,让它们更简单。它是有效的

DPSCalculatorPrototype.ViewModel

namespace DPSCalculatorPrototype.ViewModel
{
    public class MainWindowViewModel : Calculator
    {
        public MainWindowViewModel()
        {
            Damage = "7";
        }
    }
}
DPS原形

namespace DPSCalculatorPrototype
{
    public class Calculator : NotifyPropertyChanged
    {
        private string _damage;

        public string Damage
        {
            get { return _damage; }

            set
            {
                _damage = value;
                RaisePropertyChange("Damage");
            }
        }
    }

    public class NotifyPropertyChanged : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public void RaisePropertyChange(string propertyName)
        {
            PropertyChanged?.Invoke(this, new
            PropertyChangedEventArgs(propertyName));
        }
    }
}
MainWindow.xaml

<Window x:Class="DPSCalculatorPrototype.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:VM="clr-namespace:DPSCalculatorPrototype.ViewModel"
            xmlns:local="clr-namespace:DPSCalculatorPrototype"
            mc:Ignorable="d"
            Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <VM:MainWindowViewModel x:Name="VMMainWindow"></VM:MainWindowViewModel>
    </Window.DataContext>
    <Grid>
        <TextBox HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" Text="{Binding Damage}" VerticalAlignment="Top" Width="120" Margin="78,28,0,0" TextChanged="TextBox_TextChanged" />
    </Grid>
</Window>

MainWindow.xaml.cs

namespace DPSCalculatorPrototype
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void TextBox_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
        {
        }
    }
}
名称空间DPSCalculatorPrototype
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
}
私有无效文本框\u TextChanged(对象发送方,System.Windows.Controls.textchangedventargs e)
{
}
}
}

您看到这些错误的原因是WPF正在查找上述名称空间,似乎找不到您要查找的内容。如果查看XAML代码,您可以看到这样一行代码:

xmlns:VM="clr-namespace:DPS_Calculator_Prototype.UseOf_INotifyPropertyChanged.ViewModel" 
这就是要声明使用名称空间的内容,因此我们需要将其指向正确的区域。将XAML更改为如下所示:

<Window x:Class="DPS_Calculator_Prototype.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:VM="clr-namespace:DPS_Calculator_Prototype.UseOf_INotifyPropertyChanged"
        xmlns:local="clr-namespace:DPS_Calculator_Prototype"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800"> 

 <Window.DataContext>
    <VM:MainWindowViewModel x:Name="VMMainWindow">  
    </VM:MainWindowViewModel>
 </Window.DataContext> 

  <Grid>
    <TextBox HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" Text=" 
    {Binding Damage}" VerticalAlignment="Top" Width="120" Margin="78,28,0,0" 
    TextChanged="TextBox_TextChanged"/>
  </Grid>
</Window>

您之所以会出现这些错误,是因为在命名空间声明中有“ViewModel”,而此命名空间不存在,因此,其中不存在任何内容。

这是我见过的最糟糕的“复制粘贴”作业之一。。。 我不知道从哪里开始

要运行应用程序,您必须:

  • 更改名称空间VM,如下所示

    xmlns:VM=“clr名称空间:DPS\u计算器\u原型。使用\u INotifyPropertyChanged”

  • DPSCalculatorPrototype.ViewModel不存在

  • TextBox\u TextChanged不存在于窗口的代码隐藏中。您必须添加该方法

    私有void TextBox\u TextChanged(对象发送者,textchangedventargs e) { //做你的事 }

  • 在主窗口类中

    为了避免让您或阅读您的代码的人头疼,您可以 应该

  • 每个类使用一个.cs文件
  • 避免将名称空间嵌套在同一个.cs文件中,并创建复制名称空间结构的文件夹树。在代码段中,只需在根目录中创建一个UseOf_INotifyPropertyChanged文件夹,并在其中创建MainWindowViewModel类
  • 读取代码时,名称空间的用途必须明确。创建一个DPS_Calculator_Prototype.ViewModels并将所有应用程序viewmodel放在其中

  • 您应该遵循C#命名约定,不要在名称空间中使用下划线等。引用的文章非常混乱。看,这只是他的示例代码,但是是的,我修改了代码以遵循C#命名约定。感谢修复了三个问题中的两个。这一个仍然是持久的:“名称‘MainWindowViewModel’在名称空间‘clr名称空间:DPS_Calculator_Prototype.UseOf_INotifyPropertyChanged’”中不存在。现在它在错误中显示为“Prototype.UseOf_INotifyPropertyChanged.ViewModel”。您仍然面临此问题吗?抱歉,我无法正确显示xaml代码,因为使用<和>创建链接。这就是为什么我使用反勾号,因为我认为它们允许转义符号。