【问题标题】:Xaml WPF MVVM NameSpace & New Project Folder, InitializeComponent(); StartupUri=Xaml WPF MVVM 命名空间和新项目文件夹,InitializeComponent();启动Uri=
【发布时间】:2018-01-08 07:53:49
【问题描述】:

我创建了一些文件夹并整理我的文件以保持 MVVM 模式的整洁。模型文件夹、视图文件夹和视图模型文件夹。

它会在多个层面上造成命名空间问题。

首先是 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 呢?

为什么?

因此,可以完全回答类似的问题。非常感谢

【问题讨论】:

  • 不要移动默认文件(MainWindow.xaml 和 App.xaml)。尽管有可能,但通常不推荐这样做,因为它带来的问题更多,它带来的优势......

标签: c# wpf xaml mvvm namespaces


【解决方案1】:

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

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

启动 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 文件夹中,但我明白了
  • 是的,你是对的,这是我对 viemodel 的错误,但我很高兴你能解决它
  • 作为一个额外的信息,你不限于StartupUri指向一个Window,你也可以使用Startup(而不是StartupUri)指向一个事件在app.xaml 中有一个处理程序。我发现这个启动序列对于 MVVM 比直接启动 Window 更有用。它让您有机会运行代码、设置 IOC 并执行其他不太适合 Window 的代码隐藏或视图模型的初始化步骤。
猜你喜欢
  • 2019-01-02
  • 1970-01-01
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
  • 2012-12-26
  • 2015-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多