【问题标题】:Pass connection string to ViewModel constructor将连接字符串传递给 ViewModel 构造函数
【发布时间】:2017-09-05 22:26:31
【问题描述】:

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

我想通过 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?还是我从根本上“做错了”?

【问题讨论】:

    标签: c# wpf xaml mvvm


    【解决方案1】:

    这对我有用,但需要注意的是静态类 Global 是在 XAML 调用 local 的命名空间中定义的。

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

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

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

    【讨论】:

    • 如此简单。我被挂断了,因为我将&lt;sys:string&gt;&lt;/sys:string&gt; 标签留在原处并将它们包裹在&lt;x:Static Member="local:Global:CnString" /&gt; 标签周围。谢谢,埃德。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    相关资源
    最近更新 更多