【问题标题】:How to bind ApplicationBar in CaliburnMicro?如何在 CaliburnMicro 中绑定 ApplicationBar?
【发布时间】:2015-04-03 00:08:39
【问题描述】:

我有使用 Caliburn.Micro 框架的 Windows Phone 8 应用程序,我需要多个应用程序栏。拥有一个应用程序栏很容易。我只是将以下代码添加到我的 XAML 中,它会自动绑定:

<phone:PhoneApplicationPage.ApplicationBar>   
    <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
        <cal:AppBarButton IconUri="/Images/appbar.edit.rest.png" Text="edit mode" Message="SwitchToEditMode"/>
        <shell:ApplicationBar.MenuItems>
            <cal:AppBarMenuItem Text="test" Message="Test"/>
        </shell:ApplicationBar.MenuItems>
    </shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>   

然后我尝试将应用程序栏替换为另一个这样的:

NewBar = new ApplicationBar();
var btn1 = new AppBarButton();
btn1.IconUri = new Uri("/Images/appbar.check.rest.png", UriKind.RelativeOrAbsolute);
btn1.Text = "get old bar";
btn1.Message = "SwitchToOldBar";
NewBar.Buttons.Add(btn1);
(GetView() as MyPage).ApplicationBar = EditBar;

此代码更改应用程序栏,但新栏不响应命令。应用程序栏按钮的单击处理程序也是空的。我可以添加自己的处理程序并完成它,但这违背了 MVVM 精神。如何将我的新应用程序栏绑定到 Caliburn.Micro 中的现有视图模型?

更新 这是我的最终解决方案,它在语法上看起来与初始代码没有太大区别。我有点不高兴 XAML 使用“消息”并且后面的代码使用点击处理程序,但它可以工作。这是更新的代码:

NewBar = new ApplicationBar();
var btn1 = new AppBarButton();
btn1.IconUri = new Uri("/Images/appbar.check.rest.png", UriKind.RelativeOrAbsolute);
btn1.Text = "get old bar";
// Original line:  btn1.Message = "SwitchToOldBar";
btn1.Click += (sender, e) => { this.SwitchToOldBar(); };
NewBar.Buttons.Add(btn1);
(GetView() as MyPage).ApplicationBar = EditBar;

【问题讨论】:

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


    【解决方案1】:

    您无法在 Windows Phone Silveright 中找到应用程序栏,因为它不是真正的 Silverlight 元素。还有一些第三方解决方案,例如Bindable Application Bar

    因为应用栏是“不同的”,所以 Caliburn AppBarButton 上的 Message 属性仅在页面导航到时才会评估。创建 Caliburn AppBarButton 是代码隐藏。

    我建议在按钮上使用一个事件处理程序,无论它是否是可绑定的,并使用 DataContext 将该调用调用到视图模型中。

    这仍然符合“MVVM 精神”,只是您自己将视图和视图模型连接在一起。

    【讨论】:

    • 我希望有一个看起来像CaliburnMicro.HereIsYourAppBar_Enjoy(appbar, viewModel, yadayada) 的方法来绑定应用程序栏。可绑定的应用程序栏对我不起作用,因为它无法处理菜单项的可见性,在我的情况下,它将有 15 个按钮和 20 个近乎疯狂的菜单项。
    • 如果您使用通用应用程序,它是完全可绑定的。 IE 非 Silverlight 风格的 windows phone 8.1 应用程序。
    • 实际上有一个方法 ViewModelBinder.BindAppBar 但是它目前不公开。
    猜你喜欢
    • 2015-07-05
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多