Con risposta Disponibilità del comando.

  • martedì 19 giugno 2012 11:15
     
      Contiene codice

    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 Class

    Appena 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:43
    Moderatore
     
     Con risposta
    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
  • 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
     
      Contiene codice

    Son riuscito:

            If CodVelViewSource.View Is Nothing Then
                MessageBox.Show("vuoto")
            Else
                e.CanExecute = True
            End If

    WPF controlla la disponibilità ciclicamente? Altrimenti non capisco come possa intercettare il cambiamento dello stato della view, prima trovata nothing.

    Intanto grazie.


    Fabrizio Alessandri




  • martedì 19 giugno 2012 14:43
    Moderatore
     
     
    Si, il controllo è triggerato da vari eventi, ad esempio il loading o
    il cambio di focus.
     

    Corrado Cavalli [Microsoft .NET MVP-MCP]
    UGIdotNET - http://www.ugidotnet.org
    Weblog: http://blogs.ugidotnet.org/corrado/
    Twitter: http://twitter.com/corcav
  • martedì 19 giugno 2012 14:45
     
     
    Si, il controllo è triggerato da vari eventi, ad esempio il loading o
    il cambio di focus.
     

    Corrado Cavalli [Microsoft .NET MVP-MCP]
    UGIdotNET - http://www.ugidotnet.org
    Weblog: http://blogs.ugidotnet.org/corrado/
    Twitter: http://twitter.com/corcav

    Ora mi spiego.

    Grazie ancora Corrado.


    Fabrizio Alessandri