How to add ListViewItem to multi-line WPF ListView manually (without binding) in XAML

I have a problem with ListView design in Expression Blend, which is more complicated than I thought it should be.

I would like to just draw a screen using XAML. This WILL NOT START in the application, it is just a static design study that should be displayed exclusively for viewing in the Expression Blend design window.

I still have this:

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

The problem is this: I don’t know how to create ListViewItems with one row or number value for each field (each column in the GridView).

I would appreciate any help, with or without code, but a necessary requirement for my workflow is that it displays the development time inside Expression Blend without having to run the application, and it is advisable that the data is not associated with another file but entered manually directly in XAML (I do not mind, in fact I WANT it).

I found this answer , but, in my opinion, it does not do what I need.

Thanks for reading!

+7
source share
2 answers

You can use an array of strings inside your ListViewItem and use DisplayMemberBinding to indicate which index should be displayed in which column.

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

Where sys: is xmlns:sys="clr-namespace:System;assembly=mscorlib"

Or you can create your own data type that will contain values:

 public class Exam { public string Date { get; set; } public string Setup { get; set; } //... } 

And use it in 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> 

Where local: points to your Exam class namespace.

+7
source

You need index bindings such as "[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); 
+1
source

All Articles