1 首先注册路由builder.Services.AddSingletonWithShellRoute<NotePage, NotePageViewModel>($“{nameof(NotePage)}”);
注册路由方法2:
在AppShell.xaml.cs文件中 AppShell 构造函数中添加
Routing.RegisterRoute(nameof(NotePage), typeof(NotePage));
2 CollectionView单选传递选中项
当 属性 SelectionMode 设置为 Single时,可以选择 中的 CollectionView 单个项。 选择某个项时, SelectedItem 属性将设置为所选项的值。 当此属性更改时, SelectionChangedCommand 将 (执行 ,并将 的值 SelectionChangedCommandParameter 传递给 ICommand) ,并 SelectionChanged 触发 事件。
3 CollectionView传递选中项,封装参数
ViewPage
<CollectionView ItemsSource="{Binding Users}" SelectionMode="Single" Grid.Row="1" SelectionChangedCommand="{Binding SelectedUserCommand}"
SelectionChangedCommandParameter="{Binding Source={RelativeSource Self}, Path=SelectedItem}" x:Name="usersCollection">
ViewModel
[RelayCommand]
private async Task SelectedUser(User user)
{
if (user is not null)
{
//参数封装
var parameter = new Dictionary<string, object>()
{
{"load",user }
};
//第一个参数路由名称,第二个参数参数内容
await Shell.Current.GoToAsync($"{nameof(UserPage)}", parameter);
}
}
4 接收参数
接收ViewModel需要继承IQueryAttributable接口,然后实现接收参数的方法
//接收参数实现
public void ApplyQueryAttributes(IDictionary<string, object> query)
{
if (query.ContainsKey("load"))
{
Note local = query["load"] as Note;
_note = local;
OnRefresh();
}
else if (query.ContainsKey("name"))
{
var name = query["name"] as string;
if (name == "new")
{
_note = new Note();
OnRefresh();
}
}
}