gpt4 book ai didi

WPF 文本 block 与 List 的绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 00:02:57 27 4
gpt4 key购买 nike

有谁知道是否有一种简单的方法可以将文本 block 绑定(bind)到列表。
到目前为止我所做的是创建一个 ListView 并将其绑定(bind)到列表,然后我在 ListView 中有一个使用单个文本 block 的模板。

我真正想做的只是将列表绑定(bind)到一个文本 block 并让它显示所有行。

在 Winforms 中有一个“Lines”属性,我可以将 List 放入其中,但在 WPF 文本 block 或 TextBox 上看不到它。

有任何想法吗?

我错过了一些简单的事情吗?

这是代码

<UserControl x:Class="QSTClient.Infrastructure.Library.Views.WorkItemLogView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="500" Height="400">
<StackPanel>
<ListView ItemsSource="{Binding Path=Logs}" >
<ListView.View>
<GridView>
<GridViewColumn Header="Log Message">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</StackPanel>

和 WorkItem 类
public class WorkItem
{
public string Name { get; set; }
public string Description { get; set; }
public string CurrentLog { get; private set; }
public string CurrentStatus { get; private set; }
public WorkItemStatus Status { get; set; }
public ThreadSafeObservableCollection<string> Logs{get;private set;}

我正在使用 Prism 创建控件并将其放入 WindowRegion
        WorkItemLogView newView = container.Resolve<WorkItemLogView>();
newView.DataContext = workItem;
regionManager.Regions["ShellWindowRegion"].Add(newView);

谢谢

最佳答案

将您的列表转换为单个字符串,其中 "\r\n"作为分隔符。并将其绑定(bind)到 TextBlock。确保 TextBlock 不受其高度的限制,以便它可以根据行数增长。
我会将其实现为 XAML 绑定(bind)的值转换器,它将字符串列表转换为单个字符串,并在其间添加新行

<TextBlock Text="{Binding Path=Logs,Converter={StaticResource ListToStringConverter}}"/>

ListToStringConverter 看起来像这样:
[ValueConversion(typeof(List<string>), typeof(string))]
public class ListToStringConverter : IValueConverter
{

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (targetType != typeof(string))
throw new InvalidOperationException("The target must be a String");

return String.Join(", ", ((List<string>)value).ToArray());
}

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

关于WPF 文本 block 与 List<string> 的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/345385/

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