列表未正确显示 WPF

List not displaying correctly WPF

情况

大家好,对于我正在开发的程序,我有一个 getRaces() 方法:

public string getAllBaseRaces()
        {
            //string to hold a list of members
            string strRaces = "";


            foreach (BaseRace s in races)
            {
                strRaces = strRaces + s.ToString() + "\n";
            }


            return strRaces;
        }

我正在尝试用我的 getRaces() 方法 return 填充一个列表,这是一个字符串,但是当我这样做时,我得到的东西看起来像这样:

this.DataContext = hillracing.getAllBaseRaces();

http://imgur.com/X1GdB52

列表框的内容是正确的,它显示了我所有的参数,比如种族名称、种族 ID、种族类型,它也显示了所有种族,这也是它的意思,部分没问题。

问题

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

我在网上看过,解决方案很模糊,并不真正适合我的具体情况。

不过

当我只是在我的 Hillracing class(存储比赛对象)中显示列表时,我得到如下信息:

this.DataContext = hillracing.Races;

http://imgur.com/PD3KFMn

--显然,第二个示例图像是两者中较好的,这是我试图通过 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>

谢谢大家。

您将绑定到 ListBox 上的 ItemsSource。这需要 多个 项,但您绑定的是单个 string.

string 可以被视为 IEnumerable<char>,因此会为 string 中的每个字符生成一个项目。这就是您每行看到一个字符的原因。

您应该绑定到更有用的 IEnumerable<T>,其中 T 代表每个项目。如果你想坚持使用字符串,比如:

public IEnumerable<string> GetRaces()
{
    foreach (BaseRace race in races)
    {
        yield return race.ToString();
    }
}

就是说,我不明白你想用这个方法做什么。为什么不直接绑定到 Races (就像你的第二个例子)?