2012-05-16 25 views
2

我必須在免責聲明前加上前言。我是一個新手程序員,我已經嘗試過自己解決這個問題,但現在已經完全沒有想法/博客文章/演練和其他來源。我非常感謝你在閱讀和回覆時間。Silverlight/XNA數據綁定不規範性

我想將scoreloop整合到我正在開發的遊戲中,但是我得到了一些非常奇怪的結果,包括數據綁定和列表框。我的測試(如下)意味着必須有一些我在做綁定錯誤,但瘋狂的事情是它實際上是我第一次使用它,但不適用於後續級別。下面是我使用的重要代碼:

XAML:

<ListBox x:Name="LeftListBox" Margin="12,48,0,128" ItemsSource="{Binding}" Background="{x:Null}" HorizontalAlignment="Left" Width="240"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Margin="0,0,0,17"> 
         <StackPanel Margin="0,0,0,0" Orientation="Horizontal" HorizontalAlignment="Left"> 
          <TextBlock Text="{Binding Rank}" TextWrapping="NoWrap" /> 
          <TextBlock Text="." Width="54"/> 
          <TextBlock Text="{Binding Result}" TextWrapping="NoWrap" Width="76"/> 
          <TextBlock Text="{Binding User.Login}" TextWrapping="NoWrap"/> 
         </StackPanel>       
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate>    
     </ListBox> 

我註冊了一個觸發事件,每當分數被加載,這個設置綁定並記錄調試消息:

LeftListBox.DataContext = App._scoresController.Scores; 
Debug.WriteLine("Scores Loaded"); 

App._scoresController.Scores包含User.Login,Rank和Result。

當我擊敗了一個關卡之後,它拉下分數並將它們顯示在列表框中,就像我期望的那樣。儘管列表框爲空白,但只要它經歷了下一級的相同循環。 「加載分數」的調試行總是被記錄下來,所以我知道事件正在觸發。

我已經在測試中迄今所做:

  1. 始終導通的綁定記錄,無法看到任何東西得到記錄在輸出。
  2. 在調試設置斷點「成績裝」行,可以看到,每次擊中有它正確分配DataContext的, 與精確匹配的名稱正確的字段
  3. 使用Dispatcher.BeginInvoke(LoadScores)審判;以確保我是這樣做的UI線程,以防萬一這是一個線程 問題
  4. 設置在stackpanel背景顏色,我可以使用,以確保它沒有被摺疊或被另一個控件隱藏的顏色 或情節串連圖板動畫
  5. 創建的相同列表框的一個副本,設置listbox.datacontext =此在同一LoadScores()方法,然後設置局部變量 它結合。發現這表現出相同的行爲, 第二次消失,我去設置datacontext
  6. 創建列表框的副本,並刪除所有綁定,手動設置三個文本字段。這並不會消失,但每當我擊敗
  7. 時,就會出現 擊敗一級(讓它工作),擊敗另一級(讓它消失),從gamepage.xaml/gamepage.xaml.cs中導航遊戲玩法發生的地方(比如mainpage.xaml,然後回到遊戲頁面,這並不能解決問題,所以我假設問題比gamepage.xaml/gamepage.xaml.cs

我覺得我必須做一些令人痛苦的愚蠢/顯而易見的事情,但我是一位新手程序員,只是隨着需要挑選一些東西,這是我第一次進入數據世界綁定。 我將不勝感激任何建議。

提前感謝您的時間。

回答

0

我發現了這個問題。當我說我從未離開GamePage.xaml.cs和Gamepage.xaml時,我錯了。

我隱瞞了我的代碼,發現我實際上跳到了一個轉換頁面,該頁面列出了下一級別的詳細信息,然後返回到GamePage。

每當我離開頁面時,App._scoresController.Scores會發生奇怪的事情。如果我在GamePage.xaml.cs中創建了一個私有的_scoresController.Scores,並使用它來代替App中的一個,那麼一切正常。它看起來像Scoreloop奇怪。