最初の(非常に単純な)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アプリであり、誰でも提供できる助けをいただければ幸いです。
カマル