Laden...

[WPF] Combobox in Datagrid mit Liste füllen

Erstellt von KPhoenix vor 12 Jahren Letzter Beitrag vor 12 Jahren 4.964 Views
K
KPhoenix Themenstarter:in
175 Beiträge seit 2011
vor 12 Jahren
[WPF] Combobox in Datagrid mit Liste füllen

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

K
KPhoenix Themenstarter:in
175 Beiträge seit 2011
vor 12 Jahren

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>

M
81 Beiträge seit 2009
vor 12 Jahren

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?

K
KPhoenix Themenstarter:in
175 Beiträge seit 2011
vor 12 Jahren

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

M
81 Beiträge seit 2009
vor 12 Jahren

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.

K
KPhoenix Themenstarter:in
175 Beiträge seit 2011
vor 12 Jahren

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.