Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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
如何在XAML中手动将ListViewItem添加到WPF多列ListView(无绑定)_Wpf_Xaml_Listview_Gridview_Listviewitem - Fatal编程技术网

如何在XAML中手动将ListViewItem添加到WPF多列ListView(无绑定)

如何在XAML中手动将ListViewItem添加到WPF多列ListView(无绑定),wpf,xaml,listview,gridview,listviewitem,Wpf,Xaml,Listview,Gridview,Listviewitem,我对Expression Blend中的ListView设计有一个问题,这个问题比我想象的要难 我想用XAML画一个屏幕。这不会在应用程序内部运行,只是一个静态设计研究,应该在Expression Blend的设计窗口中呈现以供查看 到目前为止,我有: <ListView x:Name="examList" SelectionMode="Single"> <ListView.View> <GridView> &l

我对Expression Blend中的ListView设计有一个问题,这个问题比我想象的要难

我想用XAML画一个屏幕。这不会在应用程序内部运行,只是一个静态设计研究,应该在Expression Blend的设计窗口中呈现以供查看

到目前为止,我有:

<ListView x:Name="examList" SelectionMode="Single">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Date" Width="Auto"/>
            <GridViewColumn Header="Setup" Width="Auto"/>
            <GridViewColumn Header="Protocol" Width="Auto" />
            <GridViewColumn Header="Channels" Width="Auto"/>
            <GridViewColumn Header="Duration" Width="Auto"/>
        </GridView>
    </ListView.View>

    <ListViewItem>
        <TextBlock Text="stuff" />  <!-- what should I put here??? -->
    </ListViewItem>
</ListView>

问题是:我不知道如何为每个字段(GridView中的每列)创建一个字符串或数字值的ListViewItems

无论是否有代码隐藏,我都非常感谢您的帮助,但我的工作流的一个必要要求是,它在设计时在Expression Blend内部呈现,而无需运行应用程序,而且更可取的是,数据不是从另一个文件绑定的,而是直接手工输入XAML(我不介意,实际上我想要它)

我找到了,但我想它不能满足我的需要


谢谢你的阅读

您可以在
ListViewItem
中使用字符串数组,并使用
DisplayMemberBinding
指定应在哪个列中显示哪个索引

<ListView x:Name="examList" SelectionMode="Single">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Date" Width="Auto" 
                            DisplayMemberBinding="{Binding [0]}"/>
            <GridViewColumn Header="Setup" Width="Auto" 
                            DisplayMemberBinding="{Binding [1]}"/>
            <GridViewColumn Header="Protocol" Width="Auto" 
                            DisplayMemberBinding="{Binding [2]}"/>
            <GridViewColumn Header="Channels" Width="Auto" 
                            DisplayMemberBinding="{Binding [3]}" />
            <GridViewColumn Header="Duration" Width="Auto" 
                            DisplayMemberBinding="{Binding [4]}"/>
        </GridView>
    </ListView.View>

    <ListViewItem>
        <x:Array Type="{x:Type sys:String}">
                <sys:String>This is Date</sys:String>
                <sys:String>This is Setup</sys:String>
                <sys:String>This is Protocol</sys:String>
                <sys:String>This is Channels</sys:String>
                <sys:String>This is Duration</sys:String>
            </x:Array>        
    </ListViewItem>
</ListView>
并在
列表视图项中使用它:

<ListView x:Name="examList" SelectionMode="Single">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Date" Width="Auto" 
                            DisplayMemberBinding="{Binding Date}"/>
            <GridViewColumn Header="Setup" Width="Auto" 
                            DisplayMemberBinding="{Binding Setup}"/>    
        </GridView>
    </ListView.View>

    <ListViewItem>
        <local:Exam Date="2001/1/1" Setup="Some setup" />
    </ListViewItem>
</ListView>


其中
local:
指向您的
考试
类名称空间。

您需要像“[0]”这样的索引绑定


lv.Items.Clear();
var gv=新的GridView();
lv.视图=gv;
var columns=新列表{“日期”、“设置”、“协议”、“通道”、“持续时间”};
for(int index=0;index
可能是什么?听起来像是我在找的。现在无法测试,稍后将返回(很可能)接受。非常感谢。我使用了第二个选项,因为它更简洁/不太冗长。工作得很好!这是一个不被认可的答案!这正是我所寻找的缺少的链接
displaymberbinding=newbinding(“[”+index.ToString()+“])
<Grid>
    <ListView x:Name="lv" />
</Grid>



lv.Items.Clear();
var gv = new GridView();
lv.View = gv;

var columns = new List<string> { "Date", "Setup", "Protocol", "Channels", "Duration" };
for(int index = 0; index < columns.Count; index++)
{
    gv.Columns.Add(new GridViewColumn
    {
        Header = columns[index],
        DisplayMemberBinding = new Binding("[" + index.ToString() + "]")
    });
}

// Populate list
var row1 = new List<string> { "Date1", "Setup1", "Protocol1", "Channels1", "Duration1" };
var row2 = new List<string> { "Date2", "Setup2", "Protocol2", "Channels2", "Duration2" };
lv.Items.Add(row1);
lv.Items.Add(row2);