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
[erledigt] ComboBox in UserControl - SelectedItem wird nicht angezeigt
Yeats
myCSharp.de - Member



Dabei seit:
Beiträge: 97
Herkunft: Österreich

Themenstarter:

[erledigt] ComboBox in UserControl - SelectedItem wird nicht angezeigt

beantworten | zitieren | melden

Hallo,

Habe ein UserControl gebaut.

<UserControl ... >
    <Grid x:Name="ElementRoot" DataContext="{Binding ElementName=ParentElement}">
...
<ComboBox x:Name="CountryComboBox"
                  Grid.Row="3"
                  Grid.Column="1"
                  Margin="4"
                  DisplayMemberPath="Name"
                  ItemsSource="{Binding CountryList,
                                        Mode=TwoWay}"
                  SelectedItem="{Binding SelectedItem}" />
...
    </Grid>
</UserControl>
Code behind mit den Dependency Properties


public partial class AddressControl : UserControl
    {
        public AddressControl()
        {
            InitializeComponent();
        }

        public static readonly DependencyProperty StreetProperty = DependencyProperty.Register(
            "Street", typeof(string), typeof(AddressControl), new PropertyMetadata(default(string)));

        public string Street
        {
            get { return (string)GetValue(StreetProperty); }
            set { SetValue(StreetProperty, value); }
        }

        public static readonly DependencyProperty CityProperty = DependencyProperty.Register(
            "City", typeof(string), typeof(AddressControl), new PropertyMetadata(default(string)));

        public string City
        {
            get { return (string)GetValue(CityProperty); }
            set { SetValue(CityProperty, value); }
        }

        public static readonly DependencyProperty ZipCodeProperty = DependencyProperty.Register(
            "ZipCode", typeof(string), typeof(AddressControl), new PropertyMetadata(default(string)));

        public string ZipCode
        {
            get { return (string)GetValue(ZipCodeProperty); }
            set { SetValue(ZipCodeProperty, value); }
        }

        public static readonly DependencyProperty CountryListProperty = DependencyProperty.Register(
            "CountryList", typeof(ObservableCollection<Country>), typeof(AddressControl),
            new PropertyMetadata(default(ObservableCollection<Country>)));

        public ObservableCollection<Country> CountryList
        {
            get { return (ObservableCollection<Country>)GetValue(CountryListProperty); }
            set { SetValue(CountryListProperty, value); }
        }

        public static readonly DependencyProperty SelectedItemProperty = DependencyProperty.Register(
            "SelectedItem", typeof(Country), typeof(AddressControl), new PropertyMetadata(default(Country)));

        public Country SelectedItem
        {
            get { return (Country)GetValue(SelectedItemProperty); }
            set { SetValue(SelectedItemProperty, value); }
        }
    }

Die ItemsSource der Combobox wird an eine Liste mit Countries gebunden. Das UC funktioniert soweit, dass ich die Liste bekomme, anzeigen kann, auswählen kann, und das Model auf das zugegriffen wird, die Werte auch wieder gesetzt bekommt.

Das UserControl wird folgend verwendet:

<StackPanel Orientation="Vertical">
                <controls:AddressControl City="{Binding City,
                                                        Mode=TwoWay}"
                                         CountryList="{Binding Countries,
                                                               Mode=TwoWay}"
                                         SelectedItem="{Binding Country,
                                                                Mode=TwoWay}"
                                         Street="{Binding Street,
                                                          Mode=TwoWay,
                                                          ValidatesOnDataErrors=True}"
                                         ZipCode="{Binding ZipCode,
                                                           Mode=TwoWay,
                                                           ValidatesOnDataErrors=True}" />

Wenn ich nun ein Address item mit gefüllten Werten dem UC zum Binden gebe, werden auch alle Daten, außer der Combobox, korrekt angezeigt und können geändert und gespeichert werden.
Allerdings zeigt die Combobox den Wert nicht an.
Versuchsweise wurde auch das SelectedValue der Combobox an das SelectedItem Property gebunden. Brachte allerdings auch nicht den erwünschten Effekt.

Hat jemand eine Idee was ich hier falsch mache?

Grüße
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Yeats am .
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

Hi Yeats,

ich hab noch nicht ganz verstanden, unter welchen Umständen es funktioniert, und unter welchen Umständen nicht.

Aber hast du schonmal ins Ausgabefenster geschaut, ob es Fehler beim DataBinding gab? Ansonsten hilft evtl. der Abschnitt Debugging in [Artikel] MVVM und DataBinding
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
Yeats
myCSharp.de - Member



Dabei seit:
Beiträge: 97
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

Hallo MrSparkle,

Wenn ein Item schon angelegt habe und es zum Editieren in das Control lade, dann wird die Combobox nicht mit dem Wert zuvor gespeicherten Wert befüllt.

In der Ausgabe war keine Fehlermeldung durch das DataBinding zu finden.
Die Idee mit einem Converter das Binding zu untersuchen, muss ich ausprobieren.
private Nachricht | Beiträge des Benutzers
Yeats
myCSharp.de - Member



Dabei seit:
Beiträge: 97
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

Danke,

Hat funktioniert
private Nachricht | Beiträge des Benutzers
trashkid2000
myCSharp.de - Member



Dabei seit:
Beiträge: 157

beantworten | zitieren | melden

Was hat funktioniert?

Kannst Du mal bitte beschreiben, wo das Problem lag?
Bzw., wie Du die Lösung gefunden hast.
Damit auch andere User bei gleichen Problemen eine Lösung finden.

PS.: So wirklich habe ich aber auch nicht verstanden, was das Problem war...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von trashkid2000 am .
private Nachricht | Beiträge des Benutzers