工具栏中的工具栏不会在单击时触发

时间:2017-07-04 05:05:16

标签: xamarin.forms

我的代码如下。我不知道Command是否正确地为ToolbarItem实现。编译时没有错误。点击禁毒条件时,没有任何事情发生。

--- Xaml

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"          
            xmlns:local ="clr-namespace:SembIWIS.View"  
            BackgroundColor="White"
            Title="Repair and Service"          
            x:Class="MyMainMenu">
    <ContentPage.ToolbarItems>
        <ToolbarItem Name="MenuItem1" Order="Primary" Icon="itemIcon1" Command="{Binding Item1Command}"  Priority="0" />
        <ToolbarItem Name="MenuItem2" Order="Primary" Icon="itemIcon2" Priority="1" />
    </ContentPage.ToolbarItems>   

    <local:Product>
    </local:Product>

    <local:Service>
    </local:Service>   

</TabbedPage>


--------- Code Behind:

public partial class MyMainMenu : TabbedPage
    {
        public ICommand Item1Command { get; private set; }

        public MyMainMenu()
        {
            InitializeComponent();

            BindingContext = this;

            NavigationPage.SetHasBackButton(this, true);   
            Init();
        }

        private void Init()
        {

          this.Item1Command = new Command((sender) =>
          {
               Navigation.PushAsync(new UpdateProduct());
          });


}

1 个答案:

答案 0 :(得分:0)

从我收集的评论中,您忘记添加BindingContext。虽然你现在添加它,但时机错误。在设置Init();

之前,您需要执行BindingContext方法

设置BindingContext后,除非您正确实施INotifyPropertyChanged界面,否则所有内容都会被连线,并且您所做的任何更改都不会被提取。无论如何,对于这个问题,请调整您的代码:

public MyMainMenu()
{
    InitializeComponent();

    NavigationPage.SetHasBackButton(this, true);   
    Init();

    BindingContext = this;
}

关于你在评论中关于表现和单元测试的问题:

没有性能差异,因为您将使用的MVVM框架将执行此相同的代码,只会自动为您执行此操作。如果有的话,MVVM框架可能会慢一点,因为它可能会用反射或类似的东西来解析你的ViewModels。如果要进行单元测试,则必须将代码拆分为单独的ViewModel,并将其设置为BindingContext。例如,在使用带有单独视图和ViewModel的FreshMvvm时,请查看此blog post