条件ViewModel绑定到MVVM中的单个View

时间:2016-02-04 14:40:33

标签: c# .net wpf mvvm ninject

我最近阅读了一些关于在MVVM应用程序中使用IoC的文章。 This很好的回答。我开始思考,如果我有单个View和四个ViewModel。我不知道在设计时应该将哪一个附加到View的DataContext。我会在运行时知道。

就像,在那个答案中我有定位器:

class IocConfiguration : NinjectModule
{
    public override void Load()
    {
        Bind<IStorage>().To<Storage>().InSingletonScope();

        Bind<UserControlViewModel>().ToSelf().InTransientScope().WithConstructorArguments( ... ).Named("UserControlViewModelA");
        Bind<UserControlViewModel>().ToSelf().InTransientScope().WithConstructorArguments( ... ).Named("UserControlViewModelB");
        Bind<UserControlViewModel>().ToSelf().InTransientScope().WithConstructorArguments( ... ).Named("UserControlViewModelC");
        Bind<UserControlViewModel>().ToSelf().InTransientScope().WithConstructorArguments( ... ).Named("UserControlViewModelD");

    }
}

class ViewModelLocator
{
    public UserControlViewModel UserControlViewModelA
    {
        get { return IocKernel.Get<UserControlViewModel>("UserControlViewModelA"); }
    }

    public UserControlViewModel UserControlViewModelB
    {
        get { return IocKernel.Get<UserControlViewModel>("UserControlViewModelB"); }
    }

    public UserControlViewModel UserControlViewModelC
    {
        get { return IocKernel.Get<UserControlViewModel>("UserControlViewModelC"); }
    }

    public UserControlViewModel UserControlViewModelD
    {
        get { return IocKernel.Get<UserControlViewModel>("UserControlViewModelD"); }
    }        
}

我的问题是。我应该如何在我的视图中处理它?<​​/ strong>:

<UserControl 
    ...
    DataContext="{Binding UserControlViewModelA, Source={StaticResource ViewModelLocator}}">

    <Grid>
    </Grid>
</UserControl>

我的意思是,我正在努力在运行时分配不同的ViewModel。设计时间不是问题。问题是我应该采取什么方法在运行时将特定ViewModel设置为此视图并保持最佳编程实践

0 个答案:

没有答案