Xamarin 表单TapGestureRecognitor,使用命令根据单击的图像导航到页面
xaml页面中的代码: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>
<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");
}
}