| 

.NET C# Java Javascript Exception

1
Die Aufgabe ist es die Daten tabellarisch in einer ListView darzustellen.
Die ersten 4 Spalten sind konstant (die gibt es immer und die haben immer die gleichen Überschriften), die Restlichen variabel. Es können bis zu 20 werden und die haben unterschiedliche Überschriften.

Hier die Klassen, die die Daten representieren:
class Channel
{
public string SpaltenName {get;set;} // In welche Spalte der Wert rein muß bzw
// wie die Spalte zu heißen hat.
public string Wert {get;set;} // Die eigentlichen Werte
}

class Record
{
// Die Konstanten Spalten
public string Property1 {get;set} //Wert für die erste Spalte...
public string Property2 {get;set}
public string Property3 {get;set}
public string Property4 {get;set}

public List<Channel> Items {get;set;} // Werte der restlichen Spalten
}

public ObservableCollection<Record> Records {get;set;}


Die Anzahl der Channels ist bei allen Records gleich.

Ich habe kein Plan wie ich das ohne aus c# die Controls zu generieren schaffen könnte.
Sowas wie
<StackPanel DataContext="{Binding TableViewModel}">
<ListView ItemsSource="{Binding Records}"/>
</StackPanel>

wäre ideal.

Die extra Anforderung ist, das die Inhalte der "Channel"-Spalten rechtsbündig sind;
17.02.2011
lj_1900 45 1 4
6 Antworten
2
Müsste das ganze nicht auch über DataBinding funktionieren. Ich denke da an einen ValueConverter. Du bindest eine Liste deiner Objekte an die GridViewColumns Eigenschaft und übersetzt diese mittels des ValueConverters in GridViewColumns.
20.02.2011
woni 170 1 4
Die Eigenschaft Columns von GridView ist ReadOnly.
lj_1900 21.02.2011
1
Du kannst noch versuchen die View-Eigenschaft zu setzen und dabei anstatt der Columns eben ein GridView angeben.
woni 21.02.2011
Die Idee ist es auf jeden Fall wert darüber nachzudenken, danke.
lj_1900 22.02.2011
0
Ich weiß nich ob ich die Frage richtig verstehe, aber vllt. mit einer for schleife und listview.columns.add oder so
17.02.2011
DerPunk 1,2k 1 7
Ich möchte es vermeiden ausserhalb von xaml datei etwas mit ui zu machen.
lj_1900 17.02.2011
0
An der Stelle wirst du nicht drumherum kommen, es im Code zu erledigen. Für deine weitere Arbeit musst du ein GridView benutzen.

<ListView x:Name="listView">
<ListView.View>
<GridView x:Name="gridView"/>
</ListView.View>
</ListView>
17.02.2011
Konstantin 3,7k 1 8
damit habe ich angefangen. es ist mühsam die GridViewColumns in code zu erstellen und ich wüsste nicht wie ich das mit mvvm vereinbaren könnte.

für einen funktionierenden Beispiel wäre ich dankbar.
lj_1900 17.02.2011
0
Das habe ich bis jetzt.

<!--müsste wahrscheinlich dynamic resource sein?-->
<GridViewColumnCollection x:Key="RecordColumnCollection">
<GridViewColumn Header="Eigenschaft 1" DisplayMemberBinding="{Binding Property1}"/>
<GridViewColumn Header="Eigenschaft 2" DisplayMemberBinding="{Binding Property2}"/>
<GridViewColumn Header="Eigenschaft 3" DisplayMemberBinding="{Binding Property3}"/>
<GridViewColumn Header="Eigenschaft 4" DisplayMemberBinding="{Binding Property4}"/>
<!--Header Binding funktioniert nicht. für jeden möglichen index das zu schreiben ist doof-->
<GridViewColumn Header="{Binding Items[0].SpaltenName}">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock HorizontalAlignment="Right" Text="{Binding Items[0].Wert}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridViewColumnCollection>

<ControlTemplate x:Key="RecordTemplate" TargetType='{x:Type ListViewItem}'>
<StackPanel>
<GridViewRowPresenter Content="{TemplateBinding Content}"
Columns="{StaticResource RecordColumnCollection}"/>
</StackPanel>
</ControlTemplate>

<StackPanel Orientation="Vertical" DockPanel.Dock="Bottom" >
<!--so werden die Header dargestellt-->
<GridViewHeaderRowPresenter Columns="{StaticResource RecordColumnCollection}"/>
<ListView ItemsSource="{Binding Records}">
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}" >
<Setter Property="Template" Value="{StaticResource RecordTemplate}"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
</ListView>
</StackPanel>
17.02.2011
lj_1900 45 1 4
0
Prinzip: Ein Grid mit 20 bzw. max. Spaltenanzahl erstellen (Designer). Bis auf die ersten Spalten die Eigenschaft sichtbar auf falsch stellen. Wenn die Daten in einer Tabelle sind,
-> Spaltennamen mit den Feldnamen bezeichnen.
-> Dazu braucht man zwei gleichlaufende Indices: Spaltenindes beginnend bei 4 und Feldindex beginnend bei 1 oder erstem Feld.
-> Gleichzeitig dann Visible auf True.
-> Ab zweiter Zeile dann Daten verteilen.
-> Ich mache das so mit Listboxen, Komboboxen und Datenübersichten in Grid´s.
...
17.02.2011
Gertowitsch 11 2
0
Meine Lösung ist ein UserControl. So kennt ViewModel den Control nicht. Die Spalten werden als Reaktion auf Veränderung von DataContext in CodeBehind datei des Controls angelegt.
21.02.2011
lj_1900 45 1 4

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH