36 messaggi dal 01 giugno 2007
Ciao a tutti vi spiego brevemente il problema che ormai da una settimana non riesco a risolvere:

In un view model rendo disponibili 3 proprietà publiche:

        
public ObservableCollection<BaseProfilo> allBaseProfili
        {
            get
            {
                return _allBaseProfili;
            }

            set
            {
                var oldValue = _allBaseProfili;
                _allBaseProfili = value;

                RaisePropertyChanged(allBaseProfiliPropertyName, oldValue, value, true);
            }
        }
        public ObservableCollection<UtenteToBind> allUtenti
        {
            get
            {
                return _allUtenti;
            }

            set
            {
                if (_allUtenti == value)
                {
                    return;
                }

                var oldValue = _allUtenti;
                _allUtenti = value;

                RaisePropertyChanged(allUtentiPropertyName, oldValue, value, true);
            }
        }
        public UtenteToBind detailUtente
                {
                    get
                    {
                        return _detailUtente;
                    }

                    set
                    {
                        var oldValue = _detailUtente;
                        _detailUtente = value;

                        RaisePropertyChanged(DetailUtentePropertyName, oldValue, value, true);
                    }
                }



nella rispettiva view ho messo una grid che si apre selezionando un'utente da una lista di utenti presa da "allUtenti", e che imposta = all'utente selezionato la proprietà "detail Utente"

Ora è importante saperer che nella classe utenteToBind c'è a sua volta una proprietà di tipo BaseProfilo.

Quindi mi aspetto che inserendo una combobox nella mia grid e impostandola in uqesto modo funzioni:

<ComboBox x:Name="cboPrf" Grid.Row="4" Grid.Column="1"  ItemsSource="{Binding Path=myviewModel.allBaseProfili, Source={StaticResource Locator}}" Margin="0,4,0,0" SelectedItem="{Binding Path=profilo, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True}" DisplayMemberPath="des_profilo"></ComboBox>


Qui nasce il problema, la combobox all'apertura della grid non imposta come selezionato il profilo dell'utente in DetailUtente.

Come si spiega questo comportamento?
Forse con il fatto che non vedo alcuna proprietà "profilo" sul viewmodel?

m.
36 messaggi dal 01 giugno 2007
c'è un'osservable collection di classi di tipo baseProfilo nel view model, e una proprietà di tipo baseProfilo in ogni utente quindi anche in detail utente.

Particolare tralasciato, la stessa configurazione è usata anche per l'inserimento di un nuovo utente, e funziona bene. l'unico problema è impostare il selected value o il selected item ( qualsiasi cosa funzioni ) per visualizzare il corretto profilo appartenente a detail utente nella combobox dove esistono tutti i profili
2.190 messaggi dal 04 marzo 2004
Contributi | Blog
amstrad83 wrote:

c'è un'osservable collection di classi di tipo baseProfilo nel view model, e una proprietà di tipo baseProfilo in ogni utente quindi anche in detail utente.
Particolare tralasciato, la stessa configurazione è usata anche per l'inserimento di un nuovo utente, e funziona bene. l'unico problema è impostare il selected value o il selected item ( qualsiasi cosa funzioni ) per visualizzare il corretto profilo appartenente a detail utente nella combobox dove esistono tutti i profili

Ricapitolando, il DataContext della riga è l'oggetto detailUtente di tipo UtenteToBind, quest'oggetto ha una proprietà 'profilo' che tu usi nell'espressione di binding della ComboBox?

(SelectedItem va bene, SelectedValue è un'altra cosa  )
.

Alessio Leoncini (WinRTItalia.com)
.NET Developer, Interactive Designer, UX Specialist, Trainer
Scusa.. ma sullo Xaml io leggo
SelectedItem="{Binding Path=profilo ...

Quindi mi aspetto una proprietà di nome "profilo" sul datacontext.

Ora, non mi è chiaro dal codice che hai postato chi sia il datacontext di quella ComboBox: non è il viewmodel, perchè nel binding di ItemSource lo specifichi esplicitamente
ItemsSource="{Binding Path=myviewModel.allBaseProfili, Source={StaticResource Locator}}"

Quindi, cosa vale "DataContext"?

m.
36 messaggi dal 01 giugno 2007
Allora:
DATACONTEXT DELLA COMBOBOX ViewModel-->Proprietà DetailUtente(di tipo UtenteToBind)
ITEM SOURCE DELLA COMBOBOX ViewModel-->Proprietà AllBaseProfili(observableCollection<BaseProfili>

SelectedItem="{Binding Path=profilo ... quindi si riferisce alla proprietà profilo(baseProfilo) di DetailUtente(utenteToBind).

Il datacontext lo specifico a livello della grid che contiene i controlli tra cui la famigerata combobox.

Per altri particolari sono qui che aspetto domande, e poi vi ergo un monumento se riesco a risolvere questo problema :D
2.190 messaggi dal 04 marzo 2004
Contributi | Blog
amstrad83 wrote:

Allora:
DATACONTEXT DELLA COMBOBOX ViewModel-->Proprietà DetailUtente(di tipo UtenteToBind)
ITEM SOURCE DELLA COMBOBOX ViewModel-->Proprietà
AllBaseProfili(observableCollection<BaseProfili>
SelectedItem="{Binding Path=profilo ... quindi si riferisce alla proprietà profilo(baseProfilo) di DetailUtente(utenteToBind). Il datacontext lo specifico a livello della grid che contiene i controlli tra cui la famigerata combobox.
Per altri particolari sono qui che aspetto domande, e poi vi ergo un monumento se riesco a risolvere questo problema


Potresti pubblicare il codice completo da qualche parte? mi sfugge qualcosa..
.

Alessio Leoncini (WinRTItalia.com)
.NET Developer, Interactive Designer, UX Specialist, Trainer
36 messaggi dal 01 giugno 2007
Il codice è parecchia roba, se mi spieghi bene cosa non capisci cerco di spiegartela.

cmq è piuttosto banale,

Per farvi capire:

Io ho una gridView che carica una lista di ogetti UtenteToBind,
Alla selezione di una riga o all'inserimento di un nuovo utente, una grid con all'interno un set di controlli textbox e combobox compare sopra la gridview e si prende come datacontext
L'utente selezionato nella grid view -> in caso di modifica.
ed un nuovo utente -> in caso di inserimento.

Il datacontext della grid di modifica/inserimento è quindi mindato su una proprieta di tipo utenteToBind chiamata DetailUtente diciamo piu o meno così impostata:

public utenteToBind
{
public baseProfilo profilo{get;set;}
public string nome{get;set;}
public string cognome{get;set;}
}

in caso di modifica la proprietà DetailUtente tramite un relayCommand che è associato alla selezione della riga sulla gridView viene impostata uguale all'item selezionato.
In caso di Inserimento viene impostato invece come new UtenteToBind.

L'inserimento funziona correttamente, mentre nella modifica nonostante i campi nome e cognome vengono riempiti correttamente il default della combo profili non è visibile.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.