我正在制作一个 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>
对应的 ViewModel AppViewModelBase看起来像这样。
using System.Threading.Tasks;
using DotVVM.Framework.ViewModel;
using MyApp.ViewModels.Login;
namespace MyApp.ViewModels
{
public class AppViewModelBase : DotvvmViewModelBase
{
public string SubpageTitle { get; set; }
public string Title { get { return string.Format("{0} - {1}", LogoText, SubpageTitle); } }
public LoginSection LoginSection { get; set; } = new LoginSection();
...
}
}
我的LoginSection ViewModel 也继承自DotvvmViewModelBase,问题是LoginSection的 Context 属性永远不会被填充并保持为空。我应该手动设置内部 ViewModel 的上下文吗?我还注意到 AppViewModelBase 的上下文没有在它的基本构造函数中设置,而是在稍后的某个地方设置。
这个用例的最佳实践是什么?