2012-08-13 8 views
6

Ho una schermata con alcuni dati. All'interno dello schermo ho due controlli personalizzati (sul lato sinistro e destro).Utilizzo di Lightswitch, Silverlight e controlli personalizzati

Che cosa devo fare è la seguente:

Bind alcuni dati da un database per alcuni controlli nel primo controllo personalizzato. (compilare un elenco, casella combinata ecc., Non tanto il problema)

L'utente può quindi selezionare una voce nell'elenco, premere un pulsante -> il secondo CustomControl dovrebbe ora essere reso visibile; richiedere alcuni dati dal DB, in base alla selezione e creare e mostrare dinamicamente un grafico.

Quindi so come creare il grafico e creare i controlli. Ma come posso accedere ai dati dallo schermo tramite codice e accedere a un altro CustomControl dal primo CustomControl?

Edit:

cose che ho scoperto. Controllo

  1. accesso dalla schermata

    this.FindControl("yourControl");

  2. Fai qualcosa con il controllo:

    this.FindControl("yourControl").ControlAvailable += ((o,e) => { YourControlType myControl = e.Control as YourControlType; });

  3. dati della schermata di accesso

    IContentItem dataContext = this.DataContext as IContentItem; 
        IScreenObject screen = dataContext.Screen; 
    
        IScreenProperty prop = screen.Details.Properties["yourProperty"]; 
    
        VisualCollection<yourProperty> items = prop.Value as VisualCollection<yourProperty>; 
    
  4. Visualizza nuova schermata

    Application.Current.Details.Dispatcher.BeginInvoke(() => Application.Current.ShowGraphScreen(reportItem.BlockID));

Forse questo aiuterà qualcuno.

+0

+1 solo per le piccole gemme su come accedere ai dati dello schermo. Poiché ora i controlli personalizzati devono essere in una libreria separata, aggiungere un riferimento al 'Application.common' generato dell'applicazione client, combinato con i tuoi esempi, è stato di grande aiuto. –

+0

Questo link è utile? [Custom Control Binding] (http://social.msdn.microsoft.com/Forums/en/lsextensibility/thread/394d7968-5210-441a-bf29-3da7001af07d) –

risposta

0

Creare una query di filtro con un parametro nella raccolta nel DB da cui si desidera ottenere i dati. Aggiungi questa query allo schermo e imposta Parameter Binding su FirstCustomControl.

Trascinare la query nell'albero dello schermo, cambiarla in un grafico e controllare il legame come da collegamento di Yann.

Si sarebbe quindi bisogno di un codice simile al seguente per mostrare/nascondere il controllo:

partial void ScreenName_InitializeDataWorkspace(List<IDataService> saveChangesTo) 
{ 
    this.FindControl("SecondCustomControl").IsVisible = False; 
} 

partial void ButtonName_Execute() 
{ 
    this.FindControl("SecondCustomControl").IsVisible = True; 
} 

Dal SecondCustomControl (sto assumendo questo è il grafico) è legato alla query e il parametro della query è legata al valore selezionato nello FirstCustomControl, la raccolta dei dati viene eseguita in background.