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
DataGrid: Binding (PropertyChanged)
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

DataGrid: Binding (PropertyChanged)

beantworten | zitieren | melden

Hallo liebe Community,

ich habe folgendes "Problem".


Momentane Situation:

Ich habe ein DataGrid mit meheren Spalten. Binding erfolgt über den ItemsSource:

ItemsSource="{Binding myData, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 

Nun habe ich z.B. eine Spalte, wie wie folgt aufgebaut ist:
                                                                <DataGridTemplateColumn Header="Name" Width="*" >
                                                                    <DataGridTemplateColumn.CellTemplate>
                                                                        <DataTemplate>
                                                                            <StackPanel>
                                                                                <myControls:UserSearchControl
                                                                                    x:Name="myComboControl"
                                                                                    Text="{Binding Name}"
                                                                                    SelectedValuePath="{Binding UserNr,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>

                                                                             
                                                                             
                                                                            </StackPanel>
                                                                        </DataTemplate>
                                                                    </DataGridTemplateColumn.CellTemplate>
                                                                </DataGridTemplateColumn>

Das funktioniert soweit auch alles sehr gut.

Wenn ich jedoch jetzt einen Datensatz über die Combobox ändere, speichert er diesen Wert erst wenn ich die Spalte wieder verlasse. Bedeutet: Ich klicke die CombobBox in der Spalte an, wähle anstatt dem User "Foo" den user "Bar" aus und klicke dann auf speichern.

Dann bleibt in meinem myData aber nachwievor der User "Foo" stehen. Erst wenn ich das Combobox Feld verlasse und quasi in eine andere Spalte wechsel, dann speicher, enthält er denn geänderten User "Bar".

Ich hoffe es klingt nicht zu verwirrend und ihr könnt nachvollziehen worum es geht.

Danke für die Hilfe,
reloop
private Nachricht | Beiträge des Benutzers
michlG
myCSharp.de - Experte

Avatar #avatar-2909.png


Dabei seit:
Beiträge: 3.430
Herkunft: Naturns - Südtirol - Italien

beantworten | zitieren | melden

Hallo reloop,

wos hast du da eine ComboBox?
Das Problem ist dass irgendwo die Daten nicht bei PropertyChange geschrieben werden sondern erst bei LostFocus

Falls das UserSearchControl eine von dir gemoddete ComboBox ist dann liegt vermutlich dort das Problem da diese die Wertänderung nicht sofort weitergibt.
Funktioniert es wenn du statt deinem Controll eine normale ComboBox verwendest?

Gruss
Michael
private Nachricht | Beiträge des Benutzers
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

beantworten | zitieren | melden

Hallo michlG,

ich vergaß zu erwähnen, dass mein UserSearchControl eine von mir erstelle ComboBox ist.

Der XAML-Code sieht dort wiefolgt aus:
<ComboBox x:Class="myProject.controls.SearchControls.UserSearchControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    IsEditable="True"
    DropDownOpened="ComboBoxDropDownOpened"
    KeyUp="ComboBoxKeyUp"
    DisplayMemberPath="Anzeige"
    SelectedValuePath="{Binding Nr,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"                                               
    Height="22"
    VerticalAlignment="Top"                                                                               
    Margin="0,0,0,5">
</ComboBox>

Was könnte ich falsch machen, dass der UpdateSourceTrigger fälschlicherweise LostFocus anstatt PropertyChanged erkennt?

Gruss,
reloop
private Nachricht | Beiträge des Benutzers
michlG
myCSharp.de - Experte

Avatar #avatar-2909.png


Dabei seit:
Beiträge: 3.430
Herkunft: Naturns - Südtirol - Italien

beantworten | zitieren | melden

Hallo,

probier das mal mit der Standard-ComboBox aus, soweit sieht der Code recht ok aus, aber vermutlich liegt das Problem irgendwo bei deinem Control

Ansonsten versuch es mit dem SelectedItem zu verbinden, vielleicht klappts damit

Gruss
Michael
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5.299

beantworten | zitieren | melden

Ich kenne son Verhalten von WinForms, als ganz normal. Die ItemsSource wird erst geupdatet, wenn die DataRow gewechselt wird, oder das DatagridView den Focus abgibt.
Ich vermute fast, in WPF ist das ebenso.
In WinForms würde man dann beim Speichern Form1.Validate() aufrufen, wodurch auf dem ganzen Form die Eingaben validiert werden, und in dem Zuge dann in die DataSource(s) geschrieben.
Vlt. gibts in WPF ja vergleichbares, kenn mich da noch nicht soo aus.
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers