gpt4 book ai didi

c# - 将列添加到包含图像的 ListView

转载 作者:太空狗 更新时间:2023-10-29 20:33:15 30 4
gpt4 key购买 nike

我想使用 ExpandoObject 中的数据添加一行,类似于 Dictionary<string, object> . string是列的标题和 object的值是列的值。每当我获得新数据时,我都会创建一个新的 GridView ,因为列数可以不同。在List myItems 都是行 Dictionary<string, object> ,我想在我的 View 中显示。

这是我将列添加到 View 的方式:

            List<Column> columns = new List<Column>();

myItemValues = (IDictionary<string, object>)myItems[0];
// Key is the column, value is the value
foreach (var pair in myItemValues)
{
Column column = new Column();
column.Title = pair.Key;
column.SourceField = pair.Key;
columns.Add(column);
}
view.Columns.Clear();
foreach (var column in columns)
{
Binding binding = new Binding(column.SourceField);
if (column.SourceField == "Icon")
{
view.Columns.Add(new GridViewColumn
{
Header = column.Title,
DisplayMemberBinding = binding,
CellTemplate = new DataTemplate(typeof(Image))
});
}
else
{
view.Columns.Add(new GridViewColumn { Header = column.Title, DisplayMemberBinding = binding });
}
}

在此之后我直接尝试添加行:

            foreach (dynamic item in myItems)
{
this.listView.Items.Add(item);
}

我试着修改这个solution为了其他目的。如果我只想添加 string 类型的值,此解决方案非常有效, 但现在我还想显示一个 image在 gridview 中,但如果我将一个添加到我的 gridview,它只会显示:

"System.Windows.Controls.Image"

现在我想知道,如果我可以修改我的代码以便我可以在 gridview 中显示任何类型(或至少 imagesstrings ),或者我是否必须使用一种全新的方式并且会是路?

编辑: 在之前的方法中,据说我需要创建一个新的 DataTemplate显示图像,但我发现没有一个解决方案( Solution 1Solution 2 )对我有用。

最佳答案

最好的方法是在resources中为Icon列定义DataTemplate,然后在为icon创建列的时候加载它。我修改了您的代码以展示该方法。

XAML

<Window x:Class="ListViewIcon.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ListViewIcon"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary>
<DataTemplate x:Key="iconTemplate">
<Image Source="{Binding Icon}"
Width="64"
Height="64"/>
</DataTemplate>
</ResourceDictionary>
</Window.Resources>
<Grid>
<ListView x:Name="myListView"></ListView>

</Grid>
</Window>

C#

public class Column
{
public string Title { get; set; }
public string SourceField { get; set; }
}

public partial class MainWindow : Window
{
private BitmapImage LoadImage()
{
var img = new BitmapImage();
img.BeginInit();
img.UriSource = new Uri(@"D:\image.png", UriKind.Absolute);
img.CacheOption = BitmapCacheOption.OnLoad;
img.EndInit();

return img;
}

public MainWindow()
{
InitializeComponent();

GridView gridView = new GridView();
this.myListView.View = gridView;

List<dynamic> myItems = new List<dynamic>();
dynamic myItem;
IDictionary<string, object> myItemValues;

var image = LoadImage();

// Populate the objects with dynamic columns
for (var i = 0; i < 100; i++)
{
myItem = new System.Dynamic.ExpandoObject();

foreach (string column in new string[] { "Id", "Name", "Something" })
{
myItemValues = (IDictionary<string, object>)myItem;
myItemValues[column] = "My value for " + column + " - " + i;
}

myItem.Icon = image;

myItems.Add(myItem);
}

// Assuming that all objects have same columns - using first item to determine the columns
List<Column> columns = new List<Column>();

myItemValues = (IDictionary<string, object>)myItems[0];

// Key is the column, value is the value
foreach (var pair in myItemValues)
{
Column column = new Column();

column.Title = pair.Key;
column.SourceField = pair.Key;

columns.Add(column);
}

// Add the column definitions to the list view
gridView.Columns.Clear();

foreach (var column in columns)
{

if (column.SourceField == "Icon")
{
gridView.Columns.Add(new GridViewColumn
{
Header = column.Title,
CellTemplate = FindResource("iconTemplate") as DataTemplate
});
}
else
{
var binding = new Binding(column.SourceField);
gridView.Columns.Add(new GridViewColumn { Header = column.Title, DisplayMemberBinding = binding });
}


}

// Add all items to the list
foreach (dynamic item in myItems)
{
this.myListView.Items.Add(item);
}

}
}

结果

enter image description here

关于c# - 将列添加到包含图像的 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35223969/

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