none
XAML ComboBox SelectedItem mit ItemsSource aus anderer ComoBox, Binding RRS feed

  • Frage

  • Hallo,

    Ich habe eine UserControl in XAML definiert. Im Konstruktor setze ich den DataContext:

        public sealed partial class PerformanceSettings : UserControl
        {
            public PerformanceSettings()
            {
                DataContext = SettingsAccess.getInstance().performanceSettings;
                this.InitializeComponent();
            }
        }

    Der DataContext wird auf eine Instanz der Klasse SettingsSource  gesetzt:

        public class SettingsSource
        {
            public Company[] companies { get; set; }
            public Company standardCompany { get; set; }
            public Collection standardCollection { get; set; }
            // ...
    
        }

    Die Klasse Company hat u. a. ein Array von Collections:

        public class Company : NameValuePair
        {
            public Collection[] collections { get; set; }
            // ...
        }
    Die zuvor zurückgelieferte SettingsSource-Instanz bekam beim Erzeugen ein paar Companys sowie eine Standard-Company und von dieser Standard-Company eine Standard-Collection gesetzt (das sind jetzt einfach Dummy-Werte, das Collections-Array hat mehr als 2 Einträge und das Company-Array ebenfalls):
    SettingsSource source = new SettingsSource();
    // ...
    source.companies = convertCompanies(resp.@return.companies);
    source.standardCompany = source.companies[0];
    source.standardCollection = source.standardCompany.collections[1];
    Nun möchte ich im XAML u. a. eine ComboBox mit den Companies des DataContext anzeigen und dabei soll die standardCompany vorausgewählt sein. Das funktioniert auch wunderbar:
    <ComboBox x:Name="cbo_companies" Grid.Row="1" ItemsSource="{Binding companies}" SelectedItem="{Binding standardCompany}" />
    Nun möchte ich noch eine ComboBox mit den Collections der aktuell ausgewählten Company anzeigen (funktioniert), wobei per Default die standardCollection ausgewählt sein sollte (die ja in der aktuell ausgewählten Company existiert, sollte also funktionieren). Dies funktioniert aber nicht:
    <ComboBox x:Name="cbo_collections" Grid.Row="3" ItemsSource="{Binding SelectedItem.collections, ElementName=cbo_companies}" SelectedItem="{Binding standardCollection}"/>

    Ich bekomme zwar die Collections zur aktuellen (Default/Standard)-Company in der ComboBox angezeigt, jedoch ist kein Element vorausgewählt. Wie kann ich dieses Problem umgehen?

    Danke und Grüße

    Stefan

    Mittwoch, 31. Juli 2013 06:25

Antworten

  • Hallo Stefan,

    steht die richtige Company im Code in der Property und wird nur im UI nicht richtig aktualisiert? Ist dies der Fall dann solltest du in der Klasse SettingsSource noch INotifyPropertyChanged implementieren oder gleich von der Klasse BindableBase ableiten.

    Im set der Properties musst du dann ein PropertyChanged Event auslösen bzw. OnPropertyChanged der BindableBase Klasse aufrufen.

    Daraufhin aktualisieren sich alle Controls welche mit dieser Property über Data Binding verbunden sind.

    Viele Grüße

    Maik

    --

    Maik Hanns - http://blog.maikhanns.de

    MCT, MCPD, MCSD

    Schulungen von ppedv - http://ppedv.de

    Dienstag, 6. August 2013 13:40

Alle Antworten