【发布时间】:2015-11-19 09:05:50
【问题描述】:
我创建了一个示例 UWP 项目,并基于 this tutorial 添加了 Caliburn.Micro 3.0 beta1。
使用 SplitView,我可以在按下窗格按钮时添加一个新的 ViewModel:
ShellView
<Button x:Name="OpenSecondView"
Margin="24"
Content="My Second View" />
ShellViewModel
public void OpenSecondView()
{
_navigationService.For<MainViewModel>().Navigate();
}
它会加载正确的视图(所以我想,约定是有效的)。
我在详细视图中有一个按钮,它设置了 Name 属性。
主视图
<Button Name="btnStartAction"
HorizontalAlignment="Center"
VerticalAlignment="Center"
RelativePanel.AlignHorizontalCenterWithPanel="True"
RelativePanel.Below="btnInformation"
Style="{StaticResource button}">
我在 ViewModel 中添加了一个同名的方法。
MainViewModel
public void btnStartAction()
{
var x = 2;
}
不幸的是,当我点击它时,什么也没有发生。
我应该设置什么?
更新
嗯,发生了一些奇怪的事情。
如果我在 MainView.xaml.cs 中添加以下行,按钮将起作用:
public MainView()
{
this.InitializeComponent();
this.DataContext = new MainViewModel();
}
所以,看来 ViewModel 可以找到它的 View(因此我可以看到它)但是 View 没有 DataContext。
我该怎么办?
更新 2
这就是注册框架的方式。
XAML
<SplitView.Content>
<Grid>
<Frame Grid.Row="1"
DataContext="{x:Null}"
cm:Message.Attach="[Event Loaded] = [SetupNavigationService($source)]" />
</Grid>
</SplitView.Content>
ShellModelView
public ShellViewModel(WinRTContainer container)
{
_container = container;
}
public void SetupNavigationService(Frame frame)
{
_navigationService = _container.RegisterNavigationService(frame);
}
【问题讨论】:
标签: c# caliburn.micro uwp