Xaml WPF MVVM 命名空间和新项目文件夹,InitializeComponent();StartupUri=

3
我创建了一些文件夹并组织我的文件,以保持MVVM模式的清晰性。Model文件夹,View文件夹和ViewModel文件夹。
这会在许多层面上产生命名空间问题。
首先是InitializeComponent();
- 当前上下文中不存在
其次是StartupUri=
- 找不到资源
我找到了一些答案,但没有一个完整的解决方案。
从基本情况开始:
1. 我创建了一个新的WPF c#项目(让我们称之为PROJECT) 2. 我创建了3个新文件夹。 3. 我将MainView移动到View文件夹中。
PROJECT\app.xaml应该包含什么?
- x:Class="" - StartupUri=""
PROJECT\View\MainWindow.xaml应该包含什么?
- x:Class=""
PROJECT\View\MainWindow.xaml\MainWindow.cs应该包含什么?
- 命名空间
PROJECT\ViewModel\FooViewModel.cs呢?
PROJECT\Model\FooModel.cs呢?
为什么?
因此,类似的问题可以得到完全的答案。非常感谢。

1
不要移动默认文件(MainWindow.xaml和App.xaml)。虽然这是可能的,但通常不建议这样做,因为它会带来更多问题而不是优势... - Atlasmaybe
1个回答

5

App.xaml是应用程序的起始点。x:Class应该总是定义实际类的完整命名空间。因此,在您的示例中,对于App.xaml如下所示:

 x:Class="PROJECT.App"
 StartupUri="Viewmodel/MainWindow.xaml"

Startup 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();
        }
    }
}
  • 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>
记得将代码后端(.cs)和xaml文件设置为相同的命名空间。祝你好运!

非常感谢,顺便说一下,MainWindow在View文件夹中,但我明白了。 - 1030630SL 1030630SL
是的,你说得对,这是我在视图模型方面犯的错误,但我很高兴你解决了它。 - Dragos Stoica
2
作为额外的信息,您不仅限于使用StartupUri指向一个Window,还可以使用Startup(而不是StartupUri),该属性指向在app.xaml中具有处理程序的事件。我发现这种启动顺序对于MVVM比直接启动Window要有用得多。它给了您运行代码,设置IOC和执行其他初始化步骤的机会,这些步骤确实不适合放在Window的代码后置或视图模型中。 - Bradley Uffner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接