我在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>
其中sys:
是xmlns:sys="clr-namespace:System;assembly=mscorlib"
或者,您可以创建自己的数据类型,其中包含以下值:
public class Exam
{
public string Date { get; set; }
public string Setup { get; set; }
//...
}
并在ListViewItem
:中使用
<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:
指向您的Exam
类命名空间。
您需要像"[0]"这样的索引绑定。
<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);