Xaml WPF MVVM NameSpace和新项目文件夹,InitializeComponent(); 的StartupUri =

103*_*0SL 3 c# wpf xaml namespaces mvvm

我创建了一些文件夹并组织我的文件以保持MVVM模式的清洁.模型文件夹,视图文件夹和ViewModel文件夹.

它在许多层面上创建了命名空间问题.

首先是InitializeComponent();

  • 在当前上下文中不存在

其次是StartupUri =

  • 找不到资源

我可以找到一些答案,但没有一个完整.从基本情况来看:

  1. 我创建了一个新项目WPF c#(让我们命名为PROJECT)
  2. 我创建了3个新文件夹.
  3. 我将MainView移动到View文件夹.

什么应该在PROJECT\app.xaml?

  • X:类= ""
  • 的StartupUri = ""

什么应该在PROJECT\View\MainWindow.xaml?

  • X:类= ""

什么应该在PROJECT\View\MainWindow.xaml\MainWindow.cs?

  • 命名空间

PROJECT\ViewModel\FooViewModel.cs怎么样?

PROJECT\Model\FooModel.cs怎么样?

为什么?

因此,类似的问题可以完全被证实.非常感谢

Dra*_*ica 5

App.xaml是您的应用程序的起点.x:类应始终定义实际类的完整命名空间.所以在你的例子中,App.xaml如下所示:

 x:Class="PROJECT.App"
 StartupUri="Viewmodel/MainWindow.xaml"
Run Code Online (Sandbox Code Playgroud)

启动uri定义了所需第一页的相对路径.在你的情况下将是Viewmodel/MainWindow.xaml.

如果将文件从某个位置移动到另一个位置,则应检查命名空间并相应地进行调整.对于你的MainWindow就像这里:

using System.Windows;

namespace PROJECT.Viewmodel
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
  • XAML
<Window x:Class="PROJECT.Viewmodel.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:PROJECT"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>

    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

请记住将后面的代码(.cs)和xaml文件都设置为指向同一名称空间.祝你好运!

  • 作为一个额外的信息,您不仅限于指向"Window"的"StartupUri",您还可以使用"Startup"(而不是"StartupUri")指向带有"app.xaml"处理程序的事件`.我发现这个启动序列对于MVVM比直接启动`Window`更有用.它使您有机会运行代码,设置IOC,并执行其他初始化步骤,这些步骤在"Window"的代码隐藏或视图模型中不太适合. (2认同)