2

我必须以免责声明开头。我是一名新手程序员,我已经尝试自己解决这个问题好几天了,但现在已经完全用完了想法/博客文章/演练和其他来源。我非常感谢您花时间阅读并可能回复。

我正在尝试将 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。

在我通过一个级别后,它会降低分数并将它们显示在他的列表框中,就像我期望的那样。尽管列表框为空白,但只要它通过相同的循环进入下一个级别。“Scores Loaded”的调试行总是被记录,所以我知道事件正在触发。

到目前为止我在测试中所做的事情:

  1. 为绑定日志打开 ALL 并且在输出中看不到任何内容。
  2. 在 Debug "Scores Loaded" 行设置一个断点,可以看到每次它到达那里时,它都正确分配了 datacontext,正确的字段名称完全匹配
  3. 尝试使用 Dispatcher.BeginInvoke(LoadScores); 确保我是在 UI 线程之外进行的,以防万一这是线程问题
  4. 将堆栈面板上的背景颜色设置为我可以使用的颜色,以确保它不会被其他控件或情节提要动画折叠或隐藏
  5. 创建同一个列表框的副本,在同一个 LoadScores() 方法中设置 listbox.datacontext = this,然后设置要绑定到的局部变量。发现这表现出相同的行为,在我第二次去设置数据上下文时消失了
  6. 创建列表框的副本并删除所有绑定,手动设置三个文本字段。这不会消失,但每次我通过一个级别时都会出现
  7. 击败一个级别(让它工作),击败另一个级别(让它消失),离开游戏发生的 gamepage.xaml/gamepage.xaml.cs(比如 mainpage.xaml,然后回到游戏页面.这并不能解决问题,所以我假设问题比gamepage.xaml/gamepage.xaml.cs内部的问题更高

我觉得我必须做一些令人痛苦的愚蠢/显而易见的事情,但我是一个新手程序员,只是根据需要拾取碎片,这是我第一次进入数据绑定世界。我将不胜感激任何建议。

在此先感谢您的时间。

4

1 回答 1

0

我发现了问题。当我说我永远不会离开 GamePage.xaml.cs 和 Gamepage.xaml 时,我错了。

我重新检查了我的代码,发现我实际上是跳到一个列出下一个级别详细信息的转换页面,然后返回到 GamePage。

每当我离开页面时,App._scoresController.Scores 就会发生奇怪的事情。如果我在 GamePage.xaml.cs 中创建了一个私有 _scoresController.Scores 并使用它而不是 App 中的那个,那么一切正常。Scoreloop 看起来有些奇怪。

于 2012-05-17T18:24:19.567 回答