C# Windows Wpf如何使用c动态创建xaml网格#
使用Visual Studio 2019+Resharper 嘿,伙计们,我想添加ListView,它显示来自对象的内容,我从列表中获得。 当我手动编写代码时,它看起来是这样的: XAML代码:C# Windows Wpf如何使用c动态创建xaml网格#,c#,wpf,xaml,listview,foreach,C#,Wpf,Xaml,Listview,Foreach,使用Visual Studio 2019+Resharper 嘿,伙计们,我想添加ListView,它显示来自对象的内容,我从列表中获得。 当我手动编写代码时,它看起来是这样的: XAML代码: <ListView Margin="43,313,642,29" BorderThickness="2" BorderBrush="Red" x:Name="Module1"> <ListView.ItemTemplate>
<ListView Margin="43,313,642,29" BorderThickness="2" BorderBrush="Red" x:Name="Module1">
<ListView.ItemTemplate>
<DataTemplate>
<WrapPanel>
<TextBlock Text="Modul"/>
<TextBlock Text="{Binding Name}" FontWeight="Bold"/>
</WrapPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
c#代码:
List somename=pPP_2.Components.Modules.Values.Cast().ToList();
列出whatevername=new List(){somename[0]};
Module1.ItemsSource=什么名称;
我提到的模块有几个属性,{somename[0]}
只获取第一个属性并将其放入列表中
所以基本上我的问题是:
如何使用c#创建这样的xaml代码?我想为列表中的每个元素创建一个类似这样的列表视图。我不想手动创建它们,但让代码为我创建
想了好几天,我很想在这里得到一些帮助
谢谢,
伊雷泽特
另外,你基本上可以忽略我在那里创建的特殊列表。这个问题应该适用于每个列表。您可以使用
ItemsControl
和ItemTemplate
来呈现ListView
,该列表视图具有ItemTemplate
来呈现ListView项目。如果这太复杂,请考虑把它分成一个USER控件,使其更通用。
XAML的外观如下所示:
<ItemsControl x:Name="DynamicGrid">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ListView BorderThickness="2" ItemsSource="{Binding SubChildren}" BorderBrush="Red">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" FontWeight="Bold"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
为此,您将需要两种型号
// And an instance variable
public ObservableCollection<Outer> Lists { get; } = new ObservableCollection<Outer>();
public class Outer
{
public ObservableCollection<Inner> SubChildren { get; } = new ObservableCollection<Inner>();
}
public class Inner
{
public string Name { get; set; }
}
//和一个实例变量
公共ObservableCollection列表{get;}=new ObservableCollection();
公共舱外
{
public ObservableCollection子级{get;}=new ObservableCollection();
}
公共阶级内部
{
公共字符串名称{get;set;}
}
我使用此代码进行测试:
for (int i = 0; i < 10; i++)
{
var o = new Outer();
for (int k = 0; k < 10; k++)
{
o.SubChildren.Add(new Inner() { Name = "ID: "+k });
}
Lists.Add(o);
}
DynamicGrid.ItemsSource = Lists;
for(int i=0;i<10;i++)
{
var o=新的外部();
对于(int k=0;k<10;k++)
{
o、 添加(新的内部(){Name=“ID:+k});
}
增加(o);
}
DynamicGrid.ItemsSource=列表;
实际上不起作用。。
问题是我知道如何显示列表或对象中的内容,但我希望动态创建列表中对象的列表视图。意味着当对象的数量改变时,它也会改变。是否可以这样做?为什么不创建一个包含ListView和items源的(依赖项)属性的用户控件?您只需使用new List作为参数添加控件的新实例?您的代码不会为您这样做,因为您需要创建它!另外,查看您已经在使用的
数据模板
,这些模板实际上将用于您的项目列表等。。。使用xaml比使用代码容易得多。
for (int i = 0; i < 10; i++)
{
var o = new Outer();
for (int k = 0; k < 10; k++)
{
o.SubChildren.Add(new Inner() { Name = "ID: "+k });
}
Lists.Add(o);
}
DynamicGrid.ItemsSource = Lists;