首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带有mainViewModel和多视图模型的WPF C#对象问题

带有mainViewModel和多视图模型的WPF C#对象问题
EN

Stack Overflow用户
提问于 2018-12-12 02:35:00
回答 1查看 176关注 0票数 0

我在我的应用程序中实现ninject时遇到了问题。

我的应用程序包含一个MainView视图和一个视图模型。MainView正在使用resource.xaml来绘制图形用户界面。我还为我的MainView.xaml中的每个资源绑定了视图模型。

我在实现Ninject时遇到了一个问题。

在我的MainViewModel中,我正在创建;

代码语言:javascript
复制
    public logViewModel ChangelogViewModel { get; set; } = new logViewModel();
    public TabViewModel ToolTabViewModel { get; set; } = new ToolTabViewModel();

我将其作为资源文件的视图模型内容发送。如何使用ninject自动创建这些额外的视图模型?

我在使用内核绑定接口时也遇到了问题。当我的构造函数启动时,我没有从对象内核绑定中获得函数。

似乎在运行时,当我检查构造函数时,它只得到我的connectionstring,这是视图模型中的一个私有变量。但是我的函数不在那里。

代码语言:javascript
复制
        Bind<IDataAccessor>().To<DataAccessor>().InSingletonScope().WithConstructorArgument("connectionString", connectionString);

另一件奇怪的事情是,当我的存取器被调用时,它看起来并没有运行它的函数。分部类和这个有关系吗?

我正在使用telerik组件。

EN

回答 1

Stack Overflow用户

发布于 2018-12-12 04:12:27

像大多数DI容器一样,Ninject使用构造器注入。当类/视图模型构造函数请求特定接口时,您告诉它要创建什么。

当您获得该类的实例时,它会提供您注册的参数。

这是一个关于味道的又快又脏的例子。

我不只是调用starturl来显示主窗口,而是调用startup来显示主窗口。

代码语言:javascript
复制
    private void Application_Startup(object sender, StartupEventArgs e)
    {
        var nj = new StandardKernel();
        nj.Bind<IVMOne>().To<VMOne>().InTransientScope();

        MainWindow mw = new MainWindow();
        mw.DataContext = nj.Get<MainWindowViewModel>();
        mw.Show();
    }

在这里,我说当我要一个IVMOne时,就给我一个VMONe。MainWindowViewModel想要一个IVMOne,因为它是ctor。所以当我得到一个主窗口视图模型时,ninject也会给我一个VMOne。

代码语言:javascript
复制
class MainWindowViewModel
{
    public IVMOne VMOne { get; set; }
    public MainWindowViewModel(IVMOne vmOne)
    {
        VMOne = vmOne;
    }
}

然后我可以绑定到:

代码语言:javascript
复制
    Title="MainWindow" Height="450" Width="800">
<Grid>
    <TextBlock Text="{Binding VMOne.Hello}"/>
</Grid>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53730356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档