我必须以免责声明开头。我是一名新手程序员,我已经尝试自己解决这个问题好几天了,但现在已经完全用完了想法/博客文章/演练和其他来源。我非常感谢您花时间阅读并可能回复。
我正在尝试将 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”的调试行总是被记录,所以我知道事件正在触发。
到目前为止我在测试中所做的事情:
- 为绑定日志打开 ALL 并且在输出中看不到任何内容。
- 在 Debug "Scores Loaded" 行设置一个断点,可以看到每次它到达那里时,它都正确分配了 datacontext,正确的字段名称完全匹配
- 尝试使用 Dispatcher.BeginInvoke(LoadScores); 确保我是在 UI 线程之外进行的,以防万一这是线程问题
- 将堆栈面板上的背景颜色设置为我可以使用的颜色,以确保它不会被其他控件或情节提要动画折叠或隐藏
- 创建同一个列表框的副本,在同一个 LoadScores() 方法中设置 listbox.datacontext = this,然后设置要绑定到的局部变量。发现这表现出相同的行为,在我第二次去设置数据上下文时消失了
- 创建列表框的副本并删除所有绑定,手动设置三个文本字段。这不会消失,但每次我通过一个级别时都会出现
- 击败一个级别(让它工作),击败另一个级别(让它消失),离开游戏发生的 gamepage.xaml/gamepage.xaml.cs(比如 mainpage.xaml,然后回到游戏页面.这并不能解决问题,所以我假设问题比gamepage.xaml/gamepage.xaml.cs内部的问题更高
我觉得我必须做一些令人痛苦的愚蠢/显而易见的事情,但我是一个新手程序员,只是根据需要拾取碎片,这是我第一次进入数据绑定世界。我将不胜感激任何建议。
在此先感谢您的时间。