2011-10-28 19 views
0

はちょっとしたガイダンスが必要です。レム最初のコードを投稿する:WP7ページ間のXMLデータの受け渡し

XAML:

<ListBox.ItemTemplate> 
    <DataTemplate> 
     <StackPanel> 
      <TextBlock Name="subjectBlock" Text="{Binding SubjectName}" FontSize="26" TextWrapping="Wrap" Foreground="{StaticResource PhoneAccentBrush}" Tap="subjectBlock_Tap" /> 
      <TextBlock Text="{Binding LecturerName}" FontSize="24" IsHitTestVisible="False" /> 
      <TextBlock Text=" "/> 
     </StackPanel> 
    </DataTemplate> 
</ListBox.ItemTemplate> 

C#コード:

XDocument xmlCourse = XDocument.Load(xmlFile); 

var xmlData = from subject in xmlCourse.Descendants("subject") 
       select new Subject 
       { 
        SubjectID = subject.Element("subjectID").Value, 
        SubjectName = subject.Element("subjectName").Value, 
        LecturerName = subject.Element("lecturerName").Value 
       }; 

subjectList.ItemsSource = xmlData; 

xmlFile.Close(); 

...を経由して別のページにSubjectIDを渡そうとし

private void subjectBlock_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
{    
    NavigationService.Navigate(new Uri("/eIICS;component/Pages/Coursework.xaml?type=2&subject=" + subjectid, UriKind.Relative)); 
} 

イムタップイベント。私はXMLを介してデータを引っ張って、各個別の科目はIDを持っていて、そのIDを直接的または間接的に渡す手段があるかどうか疑問に思っていますか?

でも、まだ私の頭をぐるぐる回っているようです。

いくつかのガイダンスは本当にいいと思います。ありがとう。ちょうどWP7で自分自身を始める。

歓声。あなたがこれまでに実施した内容に基づい

+0

何らかの理由で、sender.DataContextが読み取られないため、このhttp://innovativesingapore.com/2010/09/code-how-to-store-data-and-pass-data-in-windows-phone/ – Damith

答えて

1

、最も簡単な方法は、TextBlockオブジェクトからのデータコンテキストを取得し、次のページにそれを渡すことです。上に書いたハンドラに追加:

private void subjectBlock_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
{ 
    var textblock = sender as TextBlock; 
    if(null != textblock) { 
     var subject = textblock.DataContext as Subject; 
     if(null != subject) { 
     string subjectid = subject.SubjectID; 
     NavigationService.Navigate(new Uri("/eIICS;component/Pages/Coursework.xaml?type=2&subject=" + subjectid, UriKind.Relative)); 
     } 
    } 

ただし、これは最適なソリューションではない可能性があります。イベントハンドラを使用してすべてのユーザーのやりとりを処理すると、コードが残業を維持しにくくなる可能性があり、イベントハンドラのテストケースを作成することは本当に困難です。 MVVMLightのようなMVVMフレームワークの使用を検討して、コードのテスト容易性を向上させることができます。フレームワークには、コード(.cs)からビュー(XAML)を分離するコマンドシステムが付属しています。解決しようhttp://blog.galasoft.ch/archive/2009/09/26/using-relaycommands-in-silverlight-and-wpf.aspx

+0

を確認してください。私はXAMLの問題だと思いますよね? – Stryker

+1

申し訳ありませんが、コードに関する問題です。今すぐ動作するはずのコードを更新しました –

0

:指揮フレームワーク上http://www.galasoft.ch/mvvm/

ポスト:それは)=道をあなたにMVVMLightプロジェクトへ

リンクを頭痛の多くを保存します。私に指針を与えてくれたLeo Tseに感謝します。私はより多くを検索し、私はこれを見つけた - http://mobile.tutsplus.com/tutorials/windows/windows-phone-7-silverlight-tutorial/

私はリストボックスを使用していたので、私はちょうどSubjectIDに渡したいです。 ListBox.SelectedItemをオブジェクトとして使用するとうまくいきました。これがハッキーかどうかわかりませんが、それは正しいようです。

private void subjectBlock_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
{ 
    var subject = subjectList.SelectedItem as Subject; 
    if (null != subject) 
    { 
     string subjectid = subject.SubjectID; 
     NavigationService.Navigate(new Uri("/eIICS;component/Pages/Coursework.xaml?type=2&subjectid=" + subjectid, UriKind.Relative)); 
    } 
} 

まだWP7を学習しています。これまでのところ爆発的だった!

+0

解決策をおめでとうございます。あなたの答えが「受け入れられた」とマークして、他の人があなたの成功から学ぶかもしれないようにしてください。乾杯〜 –

関連する問題