gpt4 book ai didi

wpf - 如何在 UserControl 中显示 ObservableCollection

转载 作者:行者123 更新时间:2023-12-04 06:23:06 25 4
gpt4 key购买 nike

我是 WPF 的新手,我发现了一些类似的问题,但不太明白最后一部分。我有一个带有包含错误消息的 ObservableCollection 的 ViewModel。我想在表单上显示这些并允许用户选择和复制全部或部分消息。 (过去在 WinForm 应用程序中,我为此使用了 RichTextBox,但我不知道如何将其绑定(bind)到 WPF 中的集合。)

我使用以下 xaml 得到了我想要的外观,但是没有像使用 RichTextBox 那样的内置方式来选择和复制。有谁知道我应该使用哪个控件,或者是否有办法启用选择/复制所有 TextBlock 的内容,或者是否有办法将其绑定(bind)到 RichTextBox?

    <Grid Margin="6">
<ScrollViewer VerticalScrollBarVisibility="Auto" Height="40" Grid.Column="0" Margin="6">
<ItemsControl ItemsSource="{Binding ErrorMessages}" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Mode=OneWay}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</Grid>

[编辑]@Andrey Shvydky - 这不适合发表评论。我花了一段时间才弄清楚正确的语法(尤其是/, 东西),但最终我得到了如下所示的流文档语法。它在表单上看起来是正确的,起初似乎支持全选/复制。但是当我在全选/复制后粘贴时,什么也没有出现。有人知道为什么吗?

 <Grid Margin="6">
<FlowDocumentScrollViewer>
<FlowDocument >
<Paragraph>
<ItemsControl ItemsSource="{Binding ErrorMessages, Mode=OneWay}" />
<Run Text="{Binding /, Mode=OneWay}" />
</Paragraph>
</FlowDocument>
</FlowDocumentScrollViewer>
</Grid>

最佳答案

除非您有大量消息,否则一个简单的 converter可能可行:

<TextBox IsReadOnly="True">
<TextBox.Text>
<Binding Path="Messages" Mode="OneWay">
<Binding.Converter>
<vc:JoinStringsConverter />
</Binding.Converter>
</Binding>
</TextBox.Text>
</TextBox>
public class JoinStringsConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var strings = value as IEnumerable<string>;
return string.Join(Environment.NewLine, strings);
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}

关于wpf - 如何在 UserControl 中显示 ObservableCollection<string>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6339376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com