2016-01-24 18 views
1

如何访问嵌套在名称空间\模块路径中的视图模型?如何访问嵌套在命名空间模块路径中的视图模型?

例子:

namespace ManageModules 
module CreateModule = 
    ... 
    type CreationViewModel() = 
     inherit ViewModelBase() 

下面的命名空间声明得到解决:

xmlns:manageModules="clr-namespace:ManageModules;assembly=ManageModules" 

在下面的XAML代码:

<Window x:Class="Client.MainWindow" 
     . . . 
     xmlns:manageModules="clr-namespace:ManageModules;assembly=ManageModules" 
     . . . /> 

    <Window.DataContext> 
     <manageModules:CreationViewModel /> 
    </Window.DataContext> 

Issue:

请注意,我的viewmodel不是直接位于名称空间下,而是名称空间\ module路径。

例子:

<Window.DataContext> 
    <manageModules:CreationViewModel /> 
</Window.DataContext> 

这不起作用:

<Window.DataContext> 
    <manageModules:CreateModule.CreationViewModel /> 
</Window.DataContext> 

结果,我无法设置DataContext的,因为提供的命名空间是不够的,以确定视图模型路径。

错误:

The name "CreationViewModel" does not exist in the namespace "clr-namespace:ManageModules;assembly=ManageModules".

我的视图模型如下:

namespace ManageModules 
module CreateModule = 

    open System.Windows.Input 
    open UILogic.State 
    open UILogic.Interaction 
    open ManageModule.Entities 
    open System.Collections.ObjectModel 

    type CreationViewModel() = 
     inherit ViewModelBase() 

     let mutable (_modules:Module ObservableCollection) = ObservableCollection() 

     member this.Modules 
      with get()  = _modules 
      and set(value) = _modules <- value 

     member this.Add moduleItem = 
      _modules.Add(moduleItem) 
+1

有你想看看与反思编译的程序集,或反编译,以便了解类型名称是什么? –

+0

@ Mark Seeman - 好主意! –

+0

我在我的博客上找到了一个解决方案。在我的文章中,我只有名字空间。因此,我没有申报模块。 https://bizmonger.wordpress.com/2015/11/25/mvvm-with-f-tutorial/ –

回答

0

刚刚从视图模型中删除模块声明。

所以删除此行:

module CreateModule = 

而只保留其余代码:

namespace ManageModules 

    open System.Windows.Input 
    open UILogic.State 
    open UILogic.Interaction 
    open ManageModule.Entities 
    open System.Collections.ObjectModel 

    type CreationViewModel() = 
     inherit ViewModelBase() 
     let name =  { First=String20("Scott"); Last=String20("Nimrod"); Suffix=None } 
     let duration = { Hours=1; Minutes=30; Seconds=0 } 
     let moduleItem = { Author=name; Duration=duration } 

     let mutable (_modules:Module ObservableCollection) = ObservableCollection() 

     do _modules.Add(moduleItem) 

     member this.Modules 
      with get()  = _modules 
      and set(value) = _modules <- value 

     member this.Add moduleItem = 
      _modules.Add(moduleItem)