Catel MVVM 结构

Posted

技术标签:

【中文标题】Catel MVVM 结构【英文标题】:Catel MVVM Structure 【发布时间】:2013-04-19 07:51:09 【问题描述】:

我有一个简单的 WPF 应用程序,我使用 Catel (3.5) 框架来使用 MVVM。 Visual Studio中Catel的默认结构是:

Solution:
  Project:
    FolderView
    FolderViewModel
    FolderModel

我想把结构改成

Solution:
  ProjectView
  ProjectViewModel
  ProjectModel

这样我完全分离了 M-VM-V 并添加了引用。

我知道,如果遵循命名约定,Catel 会自动扫描项目以查找 Viewmodel。

我无法在第二个结构上完成这项工作,任何建议都会被预处理。

编辑 1: 我在 App.xaml.cs 中添加了以下代码

var viewModelLocator = ServiceLocator.Default.ResolveType<IViewModelLocator>();
viewModelLocator.NamingConventions.Add("CatelV2ViewModel.ViewModels.[VW]ViewModel");

这对我不起作用,我不知道为什么。我确定我的程序集名称是正确的并且我以 ViewModel 结束我的类名。

编辑 2: 如果我添加以下代码,应用程序就可以工作:

viewModelLocator.Register(typeof(MainWindow), typeof(MainWindowViewModel));

但我仍然想知道为什么当我添加 NamingConvention 时它不起作用。

【问题讨论】:

为什么要拥有 ProjectView 文件夹 2 次?我缺少一个 Viewmodel 文件夹。或者这只是一个错字 @BartTeunissen 抱歉,我已经编辑了结构。这只是一个错误。 你想使用catel框架有什么原因吗?而不仅仅是坚持在普通 vs 上开发 mvvm 明智的代码? 我将从事一个相对较大的项目,我需要一个可靠的框架来工作,我认为 Catel 符合我的需求。 清除为雏菊,但在这种情况下,我无法帮助您解决您的问题。我只能用 mvvm 帮助你,而不是用框架;) 【参考方案1】:

Catel 使用了许多不同的命名约定。大多数情况下,它通过检查同一项目中的 /Views、/ViewModels、/Models 来做到这一点。

有关 Catel 中命名约定的更多信息,请访问文档:

https://catelproject.atlassian.net/wiki/display/CTL/Naming+conventions

您可能想要自定义ViewLocator 和ViewModelLocator。

【讨论】:

感谢您的回复。我仍然有一个问题要解决命名约定。我有更新代码,如果你有时间看看。 是的,您不应该手动注册类型,因为您可能只是希望它通过命名约定。您可以尝试调用 LogManager.RegisterDebugListener() 来检查输出窗口的内容。它可能会给你一些提示。 我整天都在处理这个问题,但没有任何运气。如果您有一个非常小而简单的示例,我可以遵循会很棒。 请在catelproject.atlassian.net创建一个问题,我会解决的。 这是程序集未加载到 appdomain 中的组合(未使用任何类型 => .NET 未加载它)。有关示例和修复,请参阅上述链接中的问题。

以上是关于Catel MVVM 结构的主要内容,如果未能解决你的问题,请参考以下文章

MahApps 和 Catel MVVM

将 catel 与 3rd 方控件一起使用

在 UWP 应用中使用 Catel 转换器

MTOUCH:错误 MT0034 Xamarin.iOS 和 Catel

[Catel]如何将带有构造函数参数的 ViewModel 传递给 TabService 扩展方法?

MVVM 模式下iOS项目目录结构详细说明