需要帮助显示WPF文本框中列表中的多行代码

时间:2017-04-18 15:46:09

标签: c# wpf

我有一个列表,从feedservice中提取数据并生成一组名称。我试图根据文本框内的时间放置其中三个名称。我有一切正常,但我在格式化方面遇到了问题。

NextInLine.Text = max3?.Select(x => x?.AgentName).ToList().FirstOrDefault() ?? string.Empty;

这将以last-first格式显示三个人的姓名。目前它显示一个人的名字,有时会闪烁并显示另外两个。我希望所有三个名称按照列表中提供的顺序显示在彼此之下的单独行中。可以帮助我格式化。如果需要,我可以在创建列表时添加更多代码。

XAML:

<TextBlock x:Name="NextInLine" FontFamily="segoe ui"  FontSize="20" Margin="0,205,0,0" Height="30" VerticalAlignment="Top" HorizontalAlignment="Right" Width="186" Grid.ColumnSpan="2" TextAlignment="Center" TextWrapping="Wrap" Loaded="DisplayNumber_Loaded" Foreground="White" FontWeight="Bold"/>

2 个答案:

答案 0 :(得分:1)

好吧,如果你想要所有三个名字,你当然不希望在序列上调用.FirstOrDefault(),因为这只是给你第一个。而且您不需要在其上调用.ToList(),因为您没有保留结果。

您真正想要做的就是选择序列中每个代理对象的名称,并使用换行符加入它们。我不认为您需要“无条件”?.运算符,如果我正确地回忆起max3之前的问题。 max3永远不应为null,尽管它可能包含两个,一个甚至零项。我们根据它们的属性选择了它中的项目(如果有的话),因此项目本身也不能为空。

NextInLine.Text = String.Join("\n", max3.Select(x => x.AgentName));

这样想:

IEnumerable<String> names = max3?.Select(x => x?.AgentName);

String text = String.Join("\n", names);

NextInLine.Text = text;

答案 1 :(得分:1)

试试这个:

NextInLine.Text = string.Empty;
foreach (var item in max3)
    NextInLine.Text += item.AgentName + Environment.NewLine;