Caliburn.Micro - 将侧边栏中的按钮绑定到ViewModel中的方法

时间:2015-01-21 15:57:01

标签: c# windows-phone-8 mvvm caliburn.micro

我在Windows手机应用程序中绑定位于侧边栏中的按钮时遇到问题。似乎按钮绑定只是消失了..

此处是我的代码

 <Grid x:Name="LayoutRoot" Background="Transparent">

    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">

        <sidebar:SidebarControl x:Name="sidebarControl"
                            HeaderText="WP"
                            HeaderBackground="YellowGreen"
                            HeaderForeground="White"
                            SidebarBackground="{StaticResource PhoneChromeBrush}">

            <sidebar:SidebarControl.SidebarContent>
                <Grid  HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="380">


                    <Button Content="Go to page 2"  x:Name="GoToPage2"/>

                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="*"/>
                    </Grid.RowDefinitions>

                </Grid>


            </sidebar:SidebarControl.SidebarContent>

            <Grid VerticalAlignment="Top" HorizontalAlignment="Stretch"
              Margin="12">
                <TextBlock Style="{StaticResource PhoneTextNormalStyle}">Your current view goes here</TextBlock>
            </Grid>
        </sidebar:SidebarControl>



    </Grid>

</Grid>

目前我正在使用侧边栏称为SidebarWP8的nuget。也许Calinbrun.Micro不能用这个?或者我是否必须在网格中向VM插入绑定?

这是ViewModel中的方法:

private readonly INavigationService navigationService;

public MainPageViewModel(INavigationService navigationService)
{
  this.navigationService = navigationService;
}

public void GoToPage2()
{
   navigationService.UriFor<Page2ViewModel>().Navigate();
}

2 个答案:

答案 0 :(得分:0)

我检查了Caliburn Micro的来源:我通过遍历可视树来查找具有名称的元素来处理约定绑定。但它只检查每个控件的默认内容属性。

这意味着它只会通过内容儿童元素而非 SidebarContent 等自定义属性,因此找不到命名元素那里。

您必须手动连接(通过绑定命令或添加单击处理程序)。

答案 1 :(得分:0)

<Button cm:Message.Attach="[Event Click] = [Action GoToPage2()]" />

这应该有效,因为其他评论者对于默认控件是正确的...自定义控件需要添加一些更多的处理,其中可能是一个痛苦的屁股但用CM上面的短手做它会看起来按钮中的该属性并相应处理。