2017-09-05 6 views
0

私はMVVMのベストプラクティスを理解しようとしています。私は私の主なプロジェクトではビューと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.CnString?あるいは私は根本的に「間違っている」のですか?

答えて

2

静的クラスGlobalがXAMLがlocalという名前空間で定義されているという警告が出てきています。

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

これのviewmodelコンストラクタが呼び出されます。

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

のでシンプル。私は ''タグをそのまま残して、 'タグの周りにラップしていたので、ハングアップしていました。ありがとう、エド。 – mwolfe02