Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.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
C# 如何在没有mvvm指示灯的情况下将参数传递给导航页面的viewmodel_C#_Uwp - Fatal编程技术网

C# 如何在没有mvvm指示灯的情况下将参数传递给导航页面的viewmodel

C# 如何在没有mvvm指示灯的情况下将参数传递给导航页面的viewmodel,c#,uwp,C#,Uwp,我想将参数“Trip”传递给导航页面的viewmodel。到目前为止,我有: 我将从中导航的页面的代码。这是一次旅行 public sealed partial class TripOverview : Page { public TripOverview() { this.InitializeComponent(); DataContext = new TripOverviewViewmodel(); } pu

我想将参数“Trip”传递给导航页面的viewmodel。到目前为止,我有: 我将从中导航的页面的代码。这是一次旅行

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,或者至少在创建之后刷新页面