2016-06-19 14 views
1

Ich habe ein Array von Objekten, die im Grunde ein Raster von Ids/Werte für verschiedene Kategorien ist. Wenn ich die nach Kategorie sortierte Sammlung binden kann, kann ich ein "Raster" von Textfeldern in einem ListView binden? Die ID-Werte werden bekannt sein. Beispiel zur Erläuterung unten. Ich kann mit der Benutzeroberfläche umgehen, aber ich kann nicht herausfinden, wie ich die ID platzieren soll, sondern den Wert anzeigen/binden, es sei denn, ich stoße und erstelle die Benutzeroberfläche im Code-Behind.Kann ich dieses Layout in Xaml erreichen?

public class MyItem {   
    string ID; 
    string Value; 
    string Category; 
} 

with values: 
    { id1, value1a, catA} 
    { id2, value1b, catA} 
    { id1, value2a, catB} 
    { id2, value2a, catB} 

Wunsch UI-Bindung (Listview mit jeder Zeile Wert jeder Kategorie angezeigt):

value1a  value1b 
value2a  value2b 

Antwort

0

In Ihrem Fall würde ich Sie GridView anstelle des ListView

<GridView x:Name="categoryGrid" SizeChanged="GridView_SizeChanged" > 
    <GridView.ItemContainerStyle> 
     <Style TargetType="GridViewItem"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
      <Setter Property="VerticalContentAlignment" Value="Stretch"/> 
     </Style> 
    </GridView.ItemContainerStyle> 
     <GridView.ItemTemplate> 
          <DataTemplate> 
           <TextBlock Text="{Binding Value}"/> 
          </DataTemplate> 
     </GridView.ItemTemplate> 
</GridView> 

Verwenden der Sizechanged-Ereignishandler verwenden schlagen die Breite des GridViewItem einzustellen.

private async void GridView_SizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    try 
    { 
     ItemsWrapGrid itemsWPGrid = (ItemsWrapGrid)((GridView)sender).ItemsPanelRoot; 
     double viewWidth = ApplicationView.GetForCurrentView().VisibleBounds.Width; 
     itemsWPGrid.ItemWidth = (viewWidth)/2; 
    } 
    catch 
    { 

    } 
} 

Und nicht zu vergessen die categoryGrid.ItemsSource = yourCustomList;

1

Sie können ein ListView erstellen und einige Eigenschaften zu Ihrem Modell binden. Zum Beispiel

<ListView> 
     <ListView.ItemTemplate> 
      <DataTemplate> 

       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*"></ColumnDefinition> 
         <ColumnDefinition Width="*"></ColumnDefinition> 
        </Grid.ColumnDefinitions> 

       <TextBlock Grid.Column="0" Text="{Binding ID}" /> 
       <TextBlock Grid.Column="1" Text="{Binding Value}" /> 
       <TextBlock Text="{Binding Category}" /> 
       <Etc /> 

       </Grid> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
+0

zu setzen Aber ich möchte mehrere Werte über eine Zeile, so dass dies nicht funktioniert .. – DeannaD

+0

Sie können eine Stackpanel mit Orientierung innerhalb der Reihe schaffen = "Horizontal "und platziere einige TextBlocks mit Bindungen. – GeralexGR