C# 列表未正确显示WPF

C# 列表未正确显示WPF,c#,wpf,xaml,data-binding,wpf-controls,C#,Wpf,Xaml,Data Binding,Wpf Controls,形势 嘿,伙计们,对于我正在开发的程序,我有一个getRaces()方法: 我试图用getRaces()方法return填充一个列表,它是一个字符串,但当我这样做时,我得到的结果如下所示: this.DataContext = hillracing.getAllBaseRaces(); this.DataContext = hillracing.Races; 列表框的内容是正确的,它显示了我的所有参数,比如比赛的名称、比赛的ID、比赛的类型,它还显示了所有比赛的含义,这部分很好 问题 似乎

形势

嘿,伙计们,对于我正在开发的程序,我有一个getRaces()方法:

我试图用getRaces()方法return填充一个列表,它是一个字符串,但当我这样做时,我得到的结果如下所示:

this.DataContext = hillracing.getAllBaseRaces();
this.DataContext = hillracing.Races;

列表框的内容是正确的,它显示了我的所有参数,比如比赛的名称、比赛的ID、比赛的类型,它还显示了所有比赛的含义,这部分很好

问题

似乎当字符串显示时,它显示不正确,因为它将每个字符存储为单独的列表项,而不是每个种族都是单独的列表项

我在网上查看了一下,发现解决方案含糊不清,并不真正符合我的具体情况

但是

当我在Hillracing类(存储种族对象)中显示列表时,我得到如下结果:

this.DataContext = hillracing.getAllBaseRaces();
this.DataContext = hillracing.Races;

--显然,第二个示例图像是两个图像中较好的一个,这是我试图用getRaces()方法实现的,但我在这方面失败了,所以我暂时使用它,这样我就可以解决它了,我不能使用它作为永久解决方案的原因是因为我没有所有成员类型的列表,只有BaseMember,我没有所有比赛的列表,只有BaseRace

简而言之,就目前的getRaces()而言,它并没有令人难以置信的帮助,因为它的输出很奇怪,我想知道如何使用getRaces()方法实现第二个图像

列表的XAML

<Grid Background="#19535353" Margin="-5,-3,-4,-4">
                    <Button Content="Create a Race" HorizontalAlignment="Left" Margin="56,163,0,0" VerticalAlignment="Top" Width="110" Height="110"/>
                    <Button x:Name="getRacesButton" Content="Get All Races" HorizontalAlignment="Left" Margin="56,30,0,0" VerticalAlignment="Top" Width="110" Height="110" Click="getRacesButton_Click_1"/>
                    <ContentControl Content="{Binding hillracing}" HorizontalAlignment="Left" Margin="326,273,0,0" VerticalAlignment="Top"/>
                    <ListBox HorizontalAlignment="Left" Height="406" Margin="287,30,0,0" VerticalAlignment="Top" Width="335" ItemsSource="{Binding hillracing}"/>
                    <Button Content="Join Selected Race" HorizontalAlignment="Left" Margin="287,441,0,0" VerticalAlignment="Top" Width="156" Height="42"/>
                    <Button Content="Edit Selected Race" HorizontalAlignment="Left" Margin="469,441,0,0" VerticalAlignment="Top" Width="153" Height="42" RenderTransformOrigin="0.34,0.548"/>
                </Grid>


谢谢各位。

您将绑定到
列表框上的
项目资源。这需要多个项目,但您绑定的是单个
字符串

string
可以被视为一个
IEnumerable
,因此为该
字符串中的每个字符生成一个项。这就是为什么每行看到一个字符

您应该绑定到更有用的
IEnumerable
,其中
T
表示每个项。如果您想坚持使用字符串,请执行以下操作:

public IEnumerable<string> GetRaces()
{
    foreach (BaseRace race in races)
    {
        yield return race.ToString();
    }
}
public IEnumerable GetRaces()
{
foreach(比赛中的基本比赛)
{
屈服回程赛。ToString();
}
}

也就是说,我不明白你用这种方法想做什么。为什么不直接绑定到
比赛
(如第二个示例)

你需要给我们提供更多的代码。虽然没有更多的代码可以提供,但我的方法是有效的,只是输出不起作用。该方法的输出在文本框中效果很好,但在列表中效果不是很好。你能给我看看你的xaml@Method请注意“嗨,有些东西没有按照我期望的方式工作,使用我的代码,我不会在这个问题中显示。告诉我哪里出了问题”。这不是堆栈溢出的工作方式。请更具体地参阅。然后你的问题添加细节。或者,如果你说“我的方法有效”,就删除这个问题。我在我的问题中添加了这个方法,但它实际上与这个问题无关。问题是,如果我可以使用列表,那么如何调整outputit甚至无法实现GetRaces的目的。它只是违背了我的代码的目的,但确实有效。@方法是的,确实有效,但您没有提供需要
GetRaces
的令人信服的理由。不要仅仅为了添加代码而添加代码!你是对的,唉,我在一个OOP类中,我必须用这些方法制作一个类图,它们是需要设计的,所以我最好使用它们。如果我不使用它们,那么它们的存在就毫无意义。感谢您对此的解释,Charles,我不知道为什么它只是显示chars。MVVM通常与WPF一起使用-XAML绑定到ViewModel上的各种属性和命令。使用此范例,Get Races按钮将绑定到一个命令,这将更新绑定到列表框的名为
Races
ObservableCollection
属性。如果你坚持使用WPF,就要考虑一些事情。祝你好运