2017-09-05 66 views
0

我正在尝试遵循MVVM的最佳实践(据我了解)。我在我的主项目中使用了Views,在另一个ViewModels中使用了解决方案。我的主项目中有一个静态类,它根据命令行参数(例如,/ env = Production或/ env = Development)为当前环境返回一个连接字符串。将连接字符串传递给ViewModel构造函数

我想通过XAML将连接字符串注入ViewModel。下面的作品,但它需要我硬编码在XAML连接字符串:

<Window.DataContext> 
    <ObjectDataProvider xmlns:sys="clr-namespace:System;assembly=mscorlib" ObjectType="vm:SchedulerViewModel"> 
     <ObjectDataProvider.ConstructorParameters> 
      <sys:String>Data Source =.; Initial Catalog = MyDb_Dev; Integrated Security = true;</sys:String> 
     </ObjectDataProvider.ConstructorParameters> 
    </ObjectDataProvider> 
</Window.DataContext> 

有没有办法在我的静态类的公共属性的调用来代替硬编码字符串Data Source =.; Initial Catalog = MyDb_Dev; Integrated Security = true;(命名为Global):Global.CnString?或者我从根本上“做错了”?

回答

2

这对我有用,其中静态类Global是在XAML称为local的名称空间中定义的。

<ObjectDataProvider 
    ObjectType="vm:SchedulerViewModel" 
    > 
    <ObjectDataProvider.ConstructorParameters> 
     <x:Static Member="local:Global.CnString" /> 
    </ObjectDataProvider.ConstructorParameters> 
</ObjectDataProvider> 

这个视图模型构造函数被调用:

public SchedulerViewModel(string connString) 
{ 
    ConnectionString = connString; 
} 
+1

那么简单。我被挂断了,因为我正在离开''标签并将它们环绕在''标签上。谢谢,埃德。 – mwolfe02