将数据从viewmodel传递到windows phone后面的代码

时间:2012-12-06 09:37:02

标签: viewmodel windows-phone code-behind

我试图在我的第一个(非常简单的)WP7应用程序上使用MVVM模式,但是我严重陷入困境,现在我只是想在不关心MVVM的情况下让它工作。

我的MainPage有一个MainViewModel,工作正常。我有一个按钮,可以传递一些数据并导航到“详细信息页面”。我已经设置了一个导航服务来导航到详细信息页面并传递参数,这很好。我只是无法获得视图工作的数据绑定。由于它是一个简单的应用程序,我决定将详细信息从DetailsPageVieModel.cs传递给后面的DetailsPage.xaml.cs代码并在那里完成工作。这就是那个veiw模型部分的样子。

public override void Initialize(IDictionary<string, string> parameters)
{
    DetailsPage dp = new DetailsPage();
    //DetailsPage dp = Application.Current.RootVisual as DetailsPage;
    base.Initialize(parameters);
    parameters.TryGetValue("url", out vidUrl);
    dp.LoadVideoData(vidUrl);
}

在我的DetailsPage.xaml.cs中,我有以下内容:

    public void LoadVideoData(string url)
    {
        HtmlWeb doc = new HtmlWeb();
        doc.LoadAsync("http://mydomain.com/video.php?url=" + url);
        doc.LoadCompleted += doc_LoadCompleted;
    }

    private void doc_LoadCompleted(object sender, HtmlDocumentLoadCompleted e)
    {
        this.vidTitle.Text = e.Document.GetElementbyId("title").InnerText;
        vidId = e.Document.GetElementbyId("youtubeId").InnerText;
        this.vidUrl.Source = new Uri("http://mydomain.com/video.php?url=" + vidUrl, UriKind.Absolute);

        BitmapImage bi = new BitmapImage();

        using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
        {
            using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile("temp.jpg", FileMode.Open, FileAccess.Read))
            {
                bi.SetSource(fileStream);
                this.vidImg.Height = bi.PixelHeight;
                this.vidImg.Width = bi.PixelWidth;
            }
        }
        this.vidImg.Source = bi;
    }

这是相关的DetailsPage.xaml代码

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <StackPanel>
            <TextBlock x:Name="vidTitle" Canvas.ZIndex="99" />
            <TextBlock Canvas.ZIndex="99" Text="Tap on the image to view the video." FontSize="14" Margin="0"/>
            <Button Margin="0 -50" Padding="0" BorderThickness="0">
                <Image x:Name="vidImg" Height="225" />
            </Button>
            <StackPanel Canvas.ZIndex="99" Height="516">
                <phone:WebBrowser x:Name="vidUrl" IsScriptEnabled="True" Height="516" Margin="0"/>
            </StackPanel>
        </StackPanel>
    </Grid>

我猜测问题在于以下

DetailsPage dp = new DetailsPage();
//DetailsPage dp = Application.Current.RootVisual as DetailsPage;

这些代码行都不起作用。第一行正确执行但页面没有使用正确的数据进行更新。第二行在到达dp.LoadVideoData(vidUrl)时给出了运行时错误消息;线。

这是我的第一个Windows Phone应用程序,如果有任何帮助,我将不胜感激。

哈拉

1 个答案:

答案 0 :(得分:0)

在挖掘了更多之后,我找到了以下解决方案。

DetailsPage currentPage = (App.Current as App).RootFrame.Content as DetailsPage;

我将此代码放在DetailsPageViewModel.cs中。但对于像我这样的其他新手来说,文件的名称并没有什么特别之处。它可能很好地是Monkey.cs。上面的代码只是让您访问当前显示的页面后面的代码。