Disponibilità del comando.
-
martedì 19 giugno 2012 11:15
Ciao a tutti.
Ho una datagrid con datacontext che ha origine da una CollectionViewSource.
Premetto che funziona tutto.
Come da oggetto, stavo provando i command.
Ho dei semplici pulsanti di navigazione, ai quali imposto la disponibilità, mediante il metodo "CanExecute".Public Class Window1 Dim DataSet As GommistaDataSet Dim CodVelViewSource As New CollectionViewSource Private Sub Window_Loaded(sender As System.Object, _ e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded Dim DataSet = CType(Me.FindResource("GommistaDataSet"), GommistaDataSet) Dim da As GommistaDataSetTableAdapters.CodVelTableAdapter = _ New GommistaDataSetTableAdapters.CodVelTableAdapter() da.Fill(DataSet.CodVel) Me.CodVelViewSource = CType(Me.FindResource("CodVelViewSource"), CollectionViewSource) Me.CodVelViewSource.View.MoveCurrentToFirst() contatore.Text = Me.CodVelViewSource.View.CurrentPosition + 1 End Sub Private Sub Favanti_CanExecute(sender As System.Object, _ e As System.Windows.Input.CanExecuteRoutedEventArgs) Handles Favanti.CanExecute If Me.CodVelViewSource.View.CurrentPosition _ < CType(Me.CodVelViewSource.View, CollectionView).Count - 1 Then e.CanExecute = True Else e.CanExecute = False End If End Sub End ClassAppena lancio il debug, mi restituisce "NullreferenceException non è stata gestita dal codice utente. Riferimento a un oggetto non impostato su un'istanza di oggetto.", evidenziando la CollectionViewSource come causa.
Ho dichiarato il Dataset e la CollectionViewSource a livello di classe, per poterli raggiungere anche al di fuori dell'evento Load.
La valorizzazione della istanza, avviene all'evento Load.
Se la valorizzo anche all'interno dell'evento CanExecute, naturalmente funziona, quindi ne deduco che il suddetto evento venga generato prima di quello Load.
Come posso evitare di valorizzare la CollectionViewSource, per ogni CanExecute?...
So di essermi perso in un bicchier d'acqua, ma ci sto diventando scemo. Scusate.
Grazie in anticipo.
F.Fabrizio Alessandri
Tutte le risposte
-
martedì 19 giugno 2012 13:43Moderatore
Non puoi mettere un flag che indica l'avvenuto caricamento?
Corrado Cavalli [Microsoft .NET MVP-MCP]
UGIdotNET - http://www.ugidotnet.org
Weblog: http://blogs.ugidotnet.org/corrado/
Twitter: http://twitter.com/corcav- Contrassegnato come risposta Fabrizio Alessandri martedì 19 giugno 2012 14:16
-
martedì 19 giugno 2012 13:49
Ciao Corrado,
potresti cortesemente suggerirmi in che modo?
Pazienta/te: è da un mesetto che studio WPF.P.S.
Ho appreso i Command (e molto altro) grazie ai tuoi video e articoli.
Ti ringrazio, anche a nome delle migliaia di persone che ne hanno beneficiato.Fabrizio Alessandri
-
martedì 19 giugno 2012 14:19
Son riuscito:
If CodVelViewSource.View Is Nothing Then MessageBox.Show("vuoto") Else e.CanExecute = True End IfWPF controlla la disponibilità ciclicamente? Altrimenti non capisco come possa intercettare il cambiamento dello stato della view, prima trovata nothing.
Intanto grazie.
Fabrizio Alessandri
- Modificato Fabrizio Alessandri martedì 19 giugno 2012 14:19
- Modificato Fabrizio Alessandri martedì 19 giugno 2012 14:20
- Modificato Fabrizio Alessandri martedì 19 giugno 2012 14:31
-
martedì 19 giugno 2012 14:43Moderatore
-
martedì 19 giugno 2012 14:45Si, il controllo è triggerato da vari eventi, ad esempio il loading oil cambio di focus.
Corrado Cavalli [Microsoft .NET MVP-MCP]
UGIdotNET - http://www.ugidotnet.org
Weblog: http://blogs.ugidotnet.org/corrado/
Twitter: http://twitter.com/corcavOra mi spiego.
Grazie ancora Corrado.
Fabrizio Alessandri

