Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DotVVM内部视图模型中的上下文为空_C#_Mvvm_Dotvvm - Fatal编程技术网

C# DotVVM内部视图模型中的上下文为空

C# DotVVM内部视图模型中的上下文为空,c#,mvvm,dotvvm,C#,Mvvm,Dotvvm,我正在制作一个DotVVM应用程序,我想在每个页面上显示注销按钮或登录表单。因此,我制作了自定义控件,它使用ViewModel来处理登录或注销。 因为我希望每个页面上都有这个控件,所以我将它放在.master页中 我的DotMaster页面如下所示: @viewModel MyApp.ViewModels.AppViewModelBase, MyApp <!DOCTYPE html> <html> <head> <meta charse

我正在制作一个DotVVM应用程序,我想在每个页面上显示注销按钮或登录表单。因此,我制作了自定义控件,它使用ViewModel来处理登录或注销。 因为我希望每个页面上都有这个控件,所以我将它放在.master页中

我的DotMaster页面如下所示:

@viewModel MyApp.ViewModels.AppViewModelBase, MyApp
<!DOCTYPE html>
<html>
   <head>
      <meta charset="utf-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>{{value:Title}}</title>
   </head>
   <body>
       <nav class="navbar navbar-inverse navbar-default">
           ...
           <cc:LoginPanel DataContext="{value: LoginSection}"></cc:LoginPanel>
           ...
       </nav>
       ...
   </body> 
</html>
MyLoginSectionViewModel也继承自DotvvmViewModelBase,问题是,LoginSection的上下文属性从不填充且保持为空。 我应该手动设置内部视图模型的上下文吗?我还注意到AppViewModelBase的上下文不是在它的基本构造函数中设置的,而是在以后的某个地方设置的


此用例的最佳实践是什么?

在当前版本的DotVVM(0.8.6-pre)中,页面视图模型的上下文属性由框架设置(在调用
Init
方法之前)

但是,如果viewmodel包含其他对象,则不会设置这些上下文(主要是因为性能原因-我们必须使用反射浏览viewmodel并分析每个属性)

现在,我建议在
Init
阶段将Context属性传递给子对象

public override Task Init()
{
    LoginSection.Context = Context;
}
然而,在未来的版本中,我们计划添加一些机制来自动注入这些框架对象

public override Task Init()
{
    LoginSection.Context = Context;
}