名称<...>在命名空间<...>

时间:2018-10-29 21:26:49

标签: c# wpf xaml binding datacontext

我发现自己陷入了这个似乎根本无法解决的小问题。我试图在WPF项目中将DataContext设置为Window,如下所示:

enter image description here

XAML文件:

<Window x:Class="CSB.Tasks.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:local="clr-namespace:CSB.Tasks"
    xmlns:vm="clr-namespace:CSB.Tasks.ViewModels.WPF" <!-- This is what i need -->
    mc:Ignorable="d"
    Title="MainWindow" 
    Height="350" 
    Width="525">

<WindowChrome.WindowChrome>
    <WindowChrome ResizeBorderThickness="{Binding ResizeBorderThickness}"
                  GlassFrameThickness="0"
                  CornerRadius="{Binding CornerRadius}"/>
</WindowChrome.WindowChrome>

<StackPanel Margin="5">

</StackPanel>

我想将WindowViewModel设置为Window的ViewModel,但是VS似乎找不到包含该类的文件夹。因此,当我尝试添加Window.DataContext时:

<Window.DataContext>
    <vm:WindowViewModel/>
</Window.DataContext>

VS显然告诉我该类不存在。

我一直在寻找关于SO的类似问题,但发现了很多类似问题,但没有人真正帮助过我。我已经尝试过重新启动VS,清理和重建项目,在特定的目标平台(现在将其设置为Any CPU)上编译,将ViewModel移到根文件夹中,然后再将其移回,完全没有更改。

有人知道原因是什么吗?

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我实际上设法将DataContext添加到MainWindow XAML中。为了ViewModel的名称空间被设置为CSB.Tasks以便全局访问它,但是即使使用本地xmlns,我也无法引用它。我必须根据ViewModel在项目文件夹中的实际路径更改其名称空间,所以:

namespace CSB.Tasks.ViewModels.WPF
{
   public class WindowViewModel : BaseViewModel
   {
       ...
   }
}

为了设置xmlns:vm并在DataContext声明中使用它。然后,我将ViewModel命名空间切换回CSB.Tasks并重新编译了项目,由于某种原因,在XAML编辑器中,我可以从WindowViewModel访问xmlns:local

对我来说还不是很清楚。

谢谢大家的帮助!