43 messaggi dal 03 agosto 2010
Buongiorno a tutti,
sto tentando un primo approcio all MVVM.
Sono riuscito a caricare e popolare un View associandogli il relativo ViewModel e di conseguenza il proprio DataContext.
Ora, vorrei caricarne un'altro, impostanto la Visibilty di quello precedente su Collapsed.
Il tutto fatto da un'altro View denominato CommandView, il quale è composto da due soli pulsanti che gestiscono un ICommand.
Per far ciò ho creato due proprietà all'interno del mio BaseViewModel che viene ereditato da ciascun ViewModel:

- AllUtentiViewVISIBILITY
- UtenteViewVISIBILITY

XAML ALLUTENTIview

<UserControl.DataContext>
<myApp:AllUtentiViewModel/>
</UserControl.DataContext>
<Grid Visibility="{Binding AllUtentiViewVISIBILITY, Mode=TwoWay}">
<DataGrid HorizontalAlignment="Stretch"
Margin="5"
VerticalAlignment="Stretch"
ItemsSource="{Binding AllUtentiCollection}"/>
</Grid>

XAML UTENTEview

<UserControl.DataContext>
<ViewModel:UtenteViewModel/>
</UserControl.DataContext>
<Grid Background="AntiqueWhite"
Visibility="{Binding UtenteViewVISIBILITY, Mode=TwoWay}">
<TextBlock HorizontalAlignment="Center"
TextWrapping="Wrap"
Text="UtenteView"
VerticalAlignment="Center"/>
</Grid>

BASE VIEW MODEL properties

Private _allUtentiViewVISIBILITY As New Visibility
Public Property AllUtentiViewVISIBILITY As Visibility
Get
Return _allUtentiViewVISIBILITY
End Get
Set(value As Visibility)
If (value <> _allUtentiViewVISIBILITY) Then
_allUtentiViewVISIBILITY = value
Me.OnPropertyChanged("AllUtentiViewVISIBILITY")
End If
End Set
End Property

Private _utenteViewVISIBILITY As New Visibility
Public Property UtenteViewVISIBILITY As Visibility
Get
Return _utenteViewVISIBILITY
End Get
Set(value As Visibility)
If (value <> _utenteViewVISIBILITY) Then
_utenteViewVISIBILITY = value
Me.OnPropertyChanged("UtenteViewVISIBILITY")
End If
End Set
End Property

COMMAND VIEW MODEL

Private Sub OnShowAllUtenti(parameter As Object)

AllUtentiViewVISIBILITY = Visibility.Visible
UtenteViewVISIBILITY = Visibility.Collapsed


End Sub

Public ReadOnly Property ShowAllUtentiCommand() As ICommand
Get
Return New Helpers.DelegateCommand(AddressOf OnShowAllUtenti)
End Get
End Property


Le proprietà vengono settate correttamente, ma la visibilità non viene settata nello XAML e di conseguenza visualizzo sempre e solo lo stesso controllo...
Dove sbaglio?
Vi ringrazio anticipatamente!

----------------AGGIUNGO---------------------------
Modificando a mano il valore delle property esposte dal ViewModelBase
( impostandole manualmente su Visibility.Collapsed e Visibility.Visible)
riesco nel mio intento, ossia visualizzare un View piuttosto che un'altro....
Modificato da Massimiliano.AgSoft il 03 settembre 2012 15.58 -
Da quello che vedo OnShowAllUtenti è un metodo di uno dei viewmodel. Quando imposti le due proprietà la imposti su una delle istanze del viewmodel che ogni view ha. Quindi il problema credo che sia che cambi la proprietà sull'istanza sbagliata. Devi avere un riferimento all'altro viewmodel, in genere usando un locator. Oppure manda un messaggio all'altro viewmodel usando il mediator pattern.
Letto questi articoli?
http://www.winfxitalia.com/articoli/presentation-foundation/architettura-model-view-viewmodel-wpf.aspx
http://www.winfxitalia.com/articoli/presentation-foundation/architettura-model-view-viewmodel-wpf-problemi-comuni.aspx

Ciao

Il mio blog
Homepage
43 messaggi dal 03 agosto 2010
Buongiorno Ricciolo,
ti ringrazio per i link di documentazione!
Perdonami ma dal momento che istanzio il mio VeiwModel come DataContext all'interno della mia View, come posso far rifermento ad un'altra istanza?
Ad ogni modo, mi hai dato una buona strada da percorrere: grazie mille.

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.