我的代码如下。我不知道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());
});
}
答案 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。