C# 如何在没有mvvm指示灯的情况下将参数传递给导航页面的viewmodel
我想将参数“Trip”传递给导航页面的viewmodel。到目前为止,我有: 我将从中导航的页面的代码。这是一次旅行C# 如何在没有mvvm指示灯的情况下将参数传递给导航页面的viewmodel,c#,uwp,C#,Uwp,我想将参数“Trip”传递给导航页面的viewmodel。到目前为止,我有: 我将从中导航的页面的代码。这是一次旅行 public sealed partial class TripOverview : Page { public TripOverview() { this.InitializeComponent(); DataContext = new TripOverviewViewmodel(); } pu
public sealed partial class TripOverview : Page
{
public TripOverview()
{
this.InitializeComponent();
DataContext = new TripOverviewViewmodel();
}
public void Trip_Detail(object sender, RoutedEventArgs e)
{
Trip selectedTrip = (Trip)TripFlip.SelectedItem;
this.Frame.Navigate(typeof(TripDetail), selectedTrip);
}
}
这是我的旅行详情页面。我想将从onNavigatedTo方法获得的参数添加到viewmodel,然后将其链接到Datacontext
public sealed partial class TripDetail : Page
{
public Trip selectedTrip { get; set; }
public TripDetailViewmodel vm = new TripDetailViewmodel();
public TripDetail()
{
this.InitializeComponent();
this.DataContext = vm;
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
Trip trip = (Trip)e.Parameter;
base.OnNavigatedTo(e);
}
}
因此,基本上我希望viewmodel中的属性“currentTrip:
public class TripDetailViewmodel
{
public Trip CurrentTrip { get; set; }
public TripDetailViewmodel()
{
}
}
在不使用mvvm灯的情况下进行设置
这是我的TripDetail页面的XAML
<Page
x:Class="TravelChecker.TripDetail"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:TravelChecker"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:viewmodel="using:TravelChecker.Viewmod"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Page.DataContext>
<viewmodel:TripDetailViewmodel x:Name="tripsDetailVm" />
</Page.DataContext>
<Grid>
<TextBlock x:Name="title" Text="{x:Bind tripsDetailVm.CurrentTrip.Destination.LocationName}"
FontFamily="Segoe UI" FontSize="26.667"
Foreground="Black" Padding="15,20" RenderTransformOrigin="0.318,0.392" />
<TextBox Text="{Binding ElementName=title, Path=Text, Mode=TwoWay}" x:Name="titletxt">
</TextBox>
</Grid>
当您使用来实现数据绑定时,默认源是页面,而不是DataContext
{x:Bind}将在页面后面的代码中查找属性、字段和方法。要将视图模型公开给{x:Bind},您通常需要向页面的代码隐藏中添加新字段或属性
但是如果您使用来实现数据绑定,{binding}将需要DataContext
因此,您可以选择在XAML的页面中创建的tripsDetailVm
。DataContext
标记或在code behind中创建的vm
作为绑定源。但是,无论选择哪个绑定源,都需要将CurrentTrip
属性设置为trip
当您将
tripsDetailVm
用作DataContext
时,需要将代码tripsDetailVm.CurrentTrip=trip;
添加到OnNavigatedTo
方法中。然后{x:Bind}可以在第页和{Binding}中找到tripsDetailVm.CurrentTrip.Destination.LocationName
可以在DataContext
(即tripsDetailVm
)中找到title
。虽然vm
的初始化时间晚于生成的页面,但这并不重要。您可以发布此页面的XAML吗?为了设置它,您需要将视图模型设置为属性(而不是字段)并在XAML中设置绑定。您能告诉我MVVM light是指MVVM light Toolkit吗?您可以尝试在TripDetail页面的OnNavigatedTo中添加代码vm.CurrentTrip=trip;
。请告诉我代码是否满足您的要求。我将使用XAML更新帖子。添加该行无效,因为onnavigatedto被调用为late。它首先生成页面,然后初始化vm。我想在创建页面之前初始化vm,或者至少在创建之后刷新页面