Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin 表单TapGestureRecognitor,使用命令根据单击的图像导航到页面_Xamarin_Xamarin.forms_Xamarin.android_Xamarin.ios - Fatal编程技术网

Xamarin 表单TapGestureRecognitor,使用命令根据单击的图像导航到页面

Xamarin 表单TapGestureRecognitor,使用命令根据单击的图像导航到页面,xamarin,xamarin.forms,xamarin.android,xamarin.ios,Xamarin,Xamarin.forms,Xamarin.android,Xamarin.ios,xaml页面中的代码: <StackLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"> <CollectionView ItemsSource="{Binding MeniElementi}"> <CollectionView.ItemsLayout>

xaml页面中的代码:

  <StackLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">        
            <CollectionView ItemsSource="{Binding MeniElementi}">
                <CollectionView.ItemsLayout>
                    <GridItemsLayout Orientation="Vertical"
                        Span="2" />
                </CollectionView.ItemsLayout>
                <CollectionView.ItemTemplate>
                    <DataTemplate>
                        <Frame Padding="10" WidthRequest="140" HeightRequest="140">
                            <Frame BackgroundColor="AliceBlue" WidthRequest="120" HeightRequest="120" HasShadow="True" CornerRadius="10" Padding="10" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" >
                                <StackLayout>
                                    <Image Source="http://www.clker.com/cliparts/l/u/5/P/D/A/arrow-50x50-md.png"  WidthRequest="70" HeightRequest="70"  >
                                        <Image.GestureRecognizers>
                                            <TapGestureRecognizer
                                                     Command="{Binding LoadElements}"

                                                       />
                                        </Image.GestureRecognizers>
                                    </Image>
                                    <Label Text="{Binding Title}" HeightRequest="50" WidthRequest="100" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" />
                                </StackLayout>
                            </Frame>
                        </Frame>
                    </DataTemplate>
                </CollectionView.ItemTemplate>
            </CollectionView>

        </StackLayout>

viewmodel.cs中的代码

 public class MenuViewModel :BaseViewModel, INotifyPropertyChanged
    {
        public Command LoadElements { get; set; }

        public ObservableCollection<Meni> MeniElementi { get; set; }
        public MenuViewModel()
        {

            LoadElements= new Command(execute: async () => await ExecuteElements());
            MeniElementi = new ObservableCollection<Meni>() {

            new Meni(){Title="Transatcions" ,Picture="xxx"},
            new Meni(){Title="Transatcions" ,Picture="xxx"},
       };
        }
        async Task ExecuteElements()
        {
            try
            {
                await Application.Current.MainPage.Navigation.PushAsync(new InfoPage());
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
            finally
            {     
            }
        }

公共类菜单视图模型:BaseViewModel,INotifyPropertyChanged
{
公共命令LoadElements{get;set;}
公共可观测集合MeniElementi{get;set;}
公共菜单视图模型()
{
LoadElements=new命令(execute:async()=>await-ExecuteElements());
MeniElementi=新的可观测集合(){
新的Meni(){Title=“Transatcions”,Picture=“xxx”},
新的Meni(){Title=“Transatcions”,Picture=“xxx”},
};
}
异步任务执行元素()
{
尝试
{
等待Application.Current.MainPage.Navigation.PushAsync(新的InfoPage());
}
捕获(例外情况除外)
{
Debug.WriteLine(ex);
}
最后
{     
}
}

我有一个包含图像和文本的框架菜单。也使用Xamarin.Forms.Command。我需要根据单击的图像调用命令并导航到所选页面

您可以使用MessagingCenter将消息从ViewModel发送到ContentPage

指挥
MessagingCenter.Send(这是“openNewPage”);
在ContentPage(包含CollectionView)中 在构造函数中

public xxxPage
{
  InitializeComponent();

  MessagingCenter.Subscribe<Object> (this, "openNewPage", async (sender) =>
  {
      await Navigation.PushAsync(new InfoPage());
  });
}
public xxxPage
{
初始化组件();
订阅(此“openNewPage”,异步(发送方)=>
{
等待Navigation.PushAsync(新的InfoPage());
});
}

您可以使用MessagingCenter将消息从ViewModel发送到ContentPage

指挥
MessagingCenter.Send(这是“openNewPage”);
在ContentPage(包含CollectionView)中 在构造函数中

public xxxPage
{
  InitializeComponent();

  MessagingCenter.Subscribe<Object> (this, "openNewPage", async (sender) =>
  {
      await Navigation.PushAsync(new InfoPage());
  });
}
public xxxPage
{
初始化组件();
订阅(此“openNewPage”,异步(发送方)=>
{
等待Navigation.PushAsync(新的InfoPage());
});
}

我建议您使用这个, 在Xaml中

SelectionMode="Single"
SelectedItems="{Binding SelectMenu}"
private Meni _selectMenu;
public Meni SelectMenu
    {
        get
        {
            return _selectMenu;
        }
        set
        {
            _selectMenu = value;
            if(_selectMenu!=null)
              //navigate to other page
            OnPropertyChanged("SelectMenu");
        }
    }
并在视图模型中使用此选项

SelectionMode="Single"
SelectedItems="{Binding SelectMenu}"
private Meni _selectMenu;
public Meni SelectMenu
    {
        get
        {
            return _selectMenu;
        }
        set
        {
            _selectMenu = value;
            if(_selectMenu!=null)
              //navigate to other page
            OnPropertyChanged("SelectMenu");
        }
    }

我建议你用这个, 在Xaml中

SelectionMode="Single"
SelectedItems="{Binding SelectMenu}"
private Meni _selectMenu;
public Meni SelectMenu
    {
        get
        {
            return _selectMenu;
        }
        set
        {
            _selectMenu = value;
            if(_selectMenu!=null)
              //navigate to other page
            OnPropertyChanged("SelectMenu");
        }
    }
并在视图模型中使用此选项

SelectionMode="Single"
SelectedItems="{Binding SelectMenu}"
private Meni _selectMenu;
public Meni SelectMenu
    {
        get
        {
            return _selectMenu;
        }
        set
        {
            _selectMenu = value;
            if(_selectMenu!=null)
              //navigate to other page
            OnPropertyChanged("SelectMenu");
        }
    }