我是Autocad编程的新手,几个月新的,但我设法编写了一个包含大约10个Autocad命令的应用程序。这些命令中的大多数都显示一个窗口,其他一切都是从该窗口完成的。我尝试将我的应用程序设为MVVM ..因为我在模型ViewModels视图和命令之间有几乎1对1的对应关系,所以我认为将命令放在MVVM的3个部分之一中是合适的。首先我决定将命令放在ViewModel中,然后我意识到我的命令只显示一个窗口,而ViewModel不应该处理窗口,所以我将命令移动到View的Codebehind。据我所知,只要它与严格的视图相关,就可以在代码隐藏中使用代码。然后我阅读了Autodesk提供的一些教程的CommandClass属性,我发现了这个:
CommandClassAttribute 此自定义属性类用于将类型标记为应用程序的命令类。应用程序可以指定一个且仅一个类型作为其命令类。 AutoCAD在具有此属性的类型上查找应用程序的命令方法。
这表明我应该有一个类来包含我的所有命令。然后我读了这个,证实了上述内容:
对于实例命令方法,为每个打开的文档单独实例化方法的封闭类型。
所以我在视图或视图模型中放置命令的第一种方法是完全错误的,因为我认为viewmodel实例除了运行命令之外没有做任何事情。然后我在ObjectARX的文档中读到了这个:
如果应用程序使用CommandClass属性,则必须为包含AutoCAD命令处理程序方法的每种类型声明此属性的实例。
这与上面引用的教程直截了当地相矛盾,并且还表明拥有多个类来处理命令是一种经批准的做法。
所有Autocad .NET教程都是具有一个类和一个命令的项目,因此您无需做出多少选择。
一些有经验的Autocad .NET开发人员是否可以提供一个最佳实践,或者至少可以在一个相当大的项目中管理Autocad命令?或者
答案 0 :(得分:1)
在我的工作中,我将CommandClass
属性附加到单个类,由我以前使用的向导提供。
在该命令类中,我放了命令,所有这些命令。
每个人都有CommandMethod
属性。
所以他们没有附加到任何对象或视图(我真的认为这只能使用VBA,而不是.NET)
但是他们的代码没有写在那里,我使用不同的类来管理命令,所以主命令类的工作方式大多就像命令索引,每个命令在我为自己的目的而在不同的类中调用它各自的主体。 / p>
所以,在你的位置,我可能会MyCommands
CommandClass
使用所有命令。{1}} attibute。每个命令只是从下面的ViewCommands
类调用命令体。
创建一个ViewCommands
类(以及您需要的许多其他类,以使您的模型更容易)。
此类doesn't
具有CommandClass
属性,只有常规方法。
它将具有从CommandClass
方法调用的命令的核心。
我从未尝试过使用多个CommandClass
,我相信最好将所有命令集中在一个地方,以便更好地跟踪你的插件。