0

最初の(非常に単純な)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;

これらのコード行はどちらも機能しません。最初の行は正しく実行されますが、ページは適切なデータで更新されません。そして2行目は、dp.LoadVideoData(vidUrl);に到達したときにランタイムエラーメッセージを表示します。ライン。

これは私の最初のWindowsPhoneアプリであり、誰でも提供できる助けをいただければ幸いです。

カマル

4

1 に答える 1

0

さらに掘り下げてみると、次の解決策が見つかりました。

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

このコードをDetailsPageViewModel.csに配置しました。しかし、私のような他の初心者にとっては、ファイルの名前について特別なことは何もありません。それはMonkey.csであった可能性が非常に高いです。上記のコードは、表示されている現在のページの背後にあるコードへのアクセスを提供するだけです。

于 2012-12-06T23:48:11.323 に答える