Laden...

DataGrid: Binding (PropertyChanged)

Erstellt von reloop vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.405 Views
reloop Themenstarter:in
139 Beiträge seit 2010
vor 13 Jahren
DataGrid: Binding (PropertyChanged)

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

3.430 Beiträge seit 2007
vor 13 Jahren

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

reloop Themenstarter:in
139 Beiträge seit 2010
vor 13 Jahren

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

3.430 Beiträge seit 2007
vor 13 Jahren

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

5.299 Beiträge seit 2008
vor 13 Jahren

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.