Laden...

DataGrid Mapping wie DataGridViewComboBoxColumn mit DisplayStyle Nothing

Erstellt von rokohl vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.281 Views
R
rokohl Themenstarter:in
39 Beiträge seit 2006
vor 9 Jahren
DataGrid Mapping wie DataGridViewComboBoxColumn mit DisplayStyle Nothing

Hallo,

ich versuche gerade mein ersten Schritte mit WPF und Datagrids und bin über folgendes Problem gestolpert.
Ich hab z.B. eine Tabelle, aus einem DataSet, die eine Spalte mit bestimmten Werte hat und möchte diese bei der Ausgabe auf einen lesbaren Namen mappen.
Mit einem DatenGridView ( nicht WPF ) konnte man einfach eine Spalte mit Werten auf z.B. ein statisches Dictionary mit Hilfe einer Combobox mappen.
In WPF habe ich das soweit auch hinbekommen mit:

<DataGridTemplateColumn x:Name="Name" Width="100" >
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ComboBox 
              DisplayMemberPath="Value"
              SelectedValuePath="Key" 
              IsEnabled="false"
              SelectedValue="{Binding AppId, UpdateSourceTrigger=PropertyChanged}" 
              ItemsSource="{Binding appNameDict, ElementName=window}" 
              IsReadOnly="True" 
              IsSynchronizedWithCurrentItem="False"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
 </DataGridTemplateColumn>

Diese Spalte soll aber nur lesbar sein und nicht aussehen wie eine ComboBox.
Im DataGridView konnte man einer DataGridViewComboBoxColumn den DisplayStyle Nothing verpassen und die Spalte sah aus wie eine Textbox.
Leider habe ich keine Idee/Ahnung wie ich sowas in WPF hinbekommen.

Hat jemand einen Tip?

Grüße

4.939 Beiträge seit 2008
vor 9 Jahren

Hallo,

wenn du kein ComboBox haben willst, warum verwendest du diese dann (s. Zeile 4)?
Nimm einfach einen TextBlock (du mußt dann jedoch auch noch die passenden Eigenschaften dafür nehmen).

1.378 Beiträge seit 2006
vor 9 Jahren

@Th69: weil er als Value im Property nur eine Art ID hat und dafür aber einen anderen Wert anzeigen lassen will.

@rokohl: Du kannst einem Binding einen Converter vom Typ IValueConverter oder IMultiValueConverter übergeben, der dann die Konvertierung für dich vornimmt.

Lg, XXX

R
rokohl Themenstarter:in
39 Beiträge seit 2006
vor 9 Jahren

Danke für die Antworten. IValueConverter war ein guter Tip.

Ich habe jetzt auch die Mapping Tabelle mit in mein DataSet eingefügt und eine Relation hinzugefügt.
Damit bekomme ich das aber auch nicht so einfach ohne Converter hin oder?

Wenn ich das richtig sehe ist die Erstellung eines Viewmodels für eine vorhandene DataTable mit mehreren Spalten auch nicht einfach und redundant oder kann ich das irgend wie anderst machen?

Im Moment sieht mein Converter so aus:

        
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var rowview = value as DataRowView;
            if (rowview == null) return null;
            var row = rowview.Row as ServerDataSet.ClientRow;
            if (row == null) return null;
            var software = row.GetParentRows("Software_Clients") as ServerDataSet.SoftwareRow[];
            if (null != software && software.Length > 0) return software[0].Name;
            return null;
        }