Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows Wpf如何使用c动态创建xaml网格#_C#_Wpf_Xaml_Listview_Foreach - Fatal编程技术网

C# Windows Wpf如何使用c动态创建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>

使用Visual Studio 2019+Resharper

嘿,伙计们,我想添加ListView,它显示来自对象的内容,我从列表中获得。 当我手动编写代码时,它看起来是这样的:

XAML代码:

 <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;