Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[WPF] Combobox in Datagrid mit Liste füllen
KPhoenix
myCSharp.de - Member



Dabei seit:
Beiträge: 179

Themenstarter:

[WPF] Combobox in Datagrid mit Liste füllen

beantworten | zitieren | melden

Hallo zusammen
Ich möchte im Datagrid eine Combobox-Spalte mit List-Objekten füllen.


dataGrid.ItemsSource = List
Das mit dem Editieren funktioniert, aber wie kann ich es schaffen, dass das aktuell ausgewählte Element auch angezeigt wird?

<DataGridComboBoxColumn.ElementStyle>
         <Style TargetType="ComboBox">
                  <Setter Property="ItemsSource" Value="{Binding Path=Options}" />
          </Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
          <Style TargetType="ComboBox">
                    <Setter Property="ItemsSource" Value="{Binding Path=Options}" />
          </Style>
</DataGridComboBoxColumn.EditingElementStyle>

Was muss ich noch einbauen, damit das aktuell selektierte Element angezeigt wird?
Zum Verständnis. In der Liste sind Objekte gespeichert, die selber eine Stringliste haben die Options heißt. Diese wird dann gebunden, was auch klappt. Nur das Anzeigen des selektierten Items fehlt noch.

Vielen Dank
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von KPhoenix am .
private Nachricht | Beiträge des Benutzers
KPhoenix
myCSharp.de - Member



Dabei seit:
Beiträge: 179

Themenstarter:

beantworten | zitieren | melden

Vllt anders. Ich hab es mal abgeändert, klappt aber immer noch nicht. Er sagt, er könne die Resource OptionsCB nicht finden. Wie kann ich aber sonst drauf zugreifen?

<DataGridTemplateColumn>
<DataGridTemplateColumn.CellEditingTemplate>
    <DataTemplate>
           <ComboBox ItemsSource="{Binding Options}" DisplayMemberPath="YPosition" x:Name="OptionsCB" />
     </DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
             <TextBlock Text="{Binding ElementName=OptionsCB, Path=SelectedItem}" />
         </DataTemplate>
     </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von KPhoenix am .
private Nachricht | Beiträge des Benutzers
morbus85
myCSharp.de - Member



Dabei seit:
Beiträge: 84

beantworten | zitieren | melden

Irgendwie scheint mit deine Frage unklar. Willst du etwa eine Spalte im DataGrid haben, wo eine ComboBox ist und an die wird eine List gebunden?
private Nachricht | Beiträge des Benutzers
KPhoenix
myCSharp.de - Member



Dabei seit:
Beiträge: 179

Themenstarter:

beantworten | zitieren | melden

Man muss es sich so vorstellen. Dem DataGrid wird eine Liste mit CustomObjects übergeben. Jedes CustomObject hat selber eine Liste und mehrere Felder. Die Felder werden ganz normal über TextColumns angezeigt. Die Liste soll dann in einer Combobox erscheinen. In der Combobox erscheinen die Inhalte der Liste auch, nur werden sie nicht in der Cell angezeigt.
Ich hab es jetzt auch anders gemacht

                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <ComboBox ItemsSource="{Binding Options}" DisplayMemberPath="YPosition" 
                                      Text="{Binding Path=Option.YPosition}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellEditingTemplate>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=Option.YPosition}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
So geht es auch, der Nachteil ist, ich hab die Liste Options und brauche ein zusätzliches Feld, indem die aktuelle Option gespeichert wird. Diese wird dann im TextBlock angezeigt. Würde es aber gerne ohne das zusätzliche Feld machen. Wie halt im vorherigen Beitrag, nur das im TextBlock halt das aktuell selektierte Item der Combobox angezeigt wird.

Danke
private Nachricht | Beiträge des Benutzers
morbus85
myCSharp.de - Member



Dabei seit:
Beiträge: 84

beantworten | zitieren | melden

Klingt evtl. etwas dumm, aber hast du mit
UpdateSourceTrigger=PropertyChanged
probiert oder
Mode=TwoWay
?

Bei mir hat es geklappt,also nicht dein Code, aber ich hatte auch ein Problem, wo ich evtl. über Events gehen musste.
private Nachricht | Beiträge des Benutzers
KPhoenix
myCSharp.de - Member



Dabei seit:
Beiträge: 179

Themenstarter:

beantworten | zitieren | melden

Soweit geht es nicht mal, da er die Resource gar nicht findet. Die Frage ist ja, wie kann ich das aktuell selektierte Element dem TextBlock der Cell übergeben. Daran scheitere ich, ohne ein extra Feld dafür verwenden zu müssen.
private Nachricht | Beiträge des Benutzers