如何在XAML中手动将ListViewItem添加到WPF多列ListView(无绑定)
我对Expression Blend中的ListView设计有一个问题,这个问题比我想象的要难 我想用XAML画一个屏幕。这不会在应用程序内部运行,只是一个静态设计研究,应该在Expression Blend的设计窗口中呈现以供查看 到目前为止,我有:如何在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
<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);