2013-09-27 7 views
5

Sto cercando di creare un'associazione per modificare il colore di sfondo di un'etichetta in base a una proprietà dell'elemento selezionato. Sto utilizzando il modulo:Come ottenere il percorso per il metodo SetBinding su un IContentItemProxy in LightSwitch?

this.FindControl("ItemDisplayTitle") 
     .SetBinding(TextBox.BackgrounProperty, **PATH**, 
      new MyIconverter(), BindingMode.OneWay); 

Se uso "valore" come il percorso, si utilizza il valore di ItemDisplayTitle per impostare il colore usando MyIconverter()

Ma ho davvero desidera utilizzare un'altra proprietà "Salute" che si trova sullo schermo ma è una proprietà locale per questa finestra.

Research ha mostrarmi che avrei dovuto use the form "Details.Entity.AnotherProperty " 6 giugno 2012 10:16 - Otis Ranger

Ma quando provo ad usare "DataSourceName.MyEntityName.MyProperty" Non sembra funzionare. Ho anche cercato di "Details.MyEntityName.MyProperty" e nella disperazione "Details.Entity.MyProperty"

ho abbastanza sicuro che sto avendo solo un incidente di percorso mentale, ma che cosa dovrebbe Dettagli, Entity e AnotherProperty essere? e mi manca un'ovvia pagina di riferimento su quale dovrebbe essere esattamente il percorso?

+0

stai aggiungendo questo al codice dello schermo? e la tua proprietà è locale a quello schermo? – TsSkTo

+0

Sto aggiungendo questo al codice dello schermo. La proprietà si trova nell'origine dati, ma viene visualizzata anche su quella schermata. –

+0

Ho fatto qualcosa di simile, ma ho limitato i miei controlli in xaml. Se questo codice viene aggiunto allo schermo, le tue entità dovrebbero apparire nel contesto dei dati dello schermo. 'this.customers.FirstName' o' this.CreatedScreenProperty' in xaml il percorso per queste proprietà era preceduto da "Screen" come '{Binding Path =" Screen.MyProperty Mode = "TwoWay}' – TsSkTo

risposta

2

Il problema è che è necessario aggiungere un gestore a ogni riga sulla griglia di dati. Sono 3 semplici passaggi.

pugno il risultato, si noti che è possibile associare tutte riga o un singolo controllo in fila:

enter image description here

  • Fase 1. Dichiarare il convertitore. Suppongo che il tuo convertitore funzioni bene.

Questo è il mio convertitore:

Public Class BooleanDateConverter 

    Implements System.Windows.Data.IValueConverter 

    Public Function Convert(ByVal value As Object, 
          ByVal targetType As System.Type, 
          ByVal parameter As Object, 
          ByVal culture As System.Globalization.CultureInfo) _ 
      As Object Implements System.Windows.Data.IValueConverter.Convert 


     If DirectCast(value, Boolean) Then 
      Return New System.Windows.Media.SolidColorBrush(
       System.Windows.Media.Color.FromArgb(170, 102, 255, 245)) 
     Else 
      Return New System.Windows.Media.SolidColorBrush(
       System.Windows.Media.Color.FromArgb(170, 255, 0, 0)) 
     End If 

    End Function 

    Public Function ConvertBack(ByVal value As Object, 
         ByVal targetType As System.Type, 
         ByVal parameter As Object, 
         ByVal culture As System.Globalization.CultureInfo) _ 
    As Object Implements System.Windows.Data.IValueConverter.ConvertBack 

     Return Nothing 
    End Function 

End Class 
  • Fase 2 e 3. datagrid Bind e le righe DataGrid:

Binding DataGrid InitializeDataWorkspace:

Private Sub Conversio_CategoriaPDI_a_ElementDeCosts_InitializeDataWorkspace(
     saveChangesTo As System.Collections.Generic.List(
       Of Microsoft.LightSwitch.IDataService)) 

     AddHandler Me.FindControl(
         "TConversio_CategoriaPDI_a_ElementDeCosts" 
        ).ControlAvailable, AddressOf bindejarDataGrid 

    End Sub 

Questo è il gestore per datagrid.Il legame a everyrow funzione all'interno:

Private Sub bindejarDataGrid(
      sender As Object, 
      e As Microsoft.LightSwitch.Presentation.ControlAvailableEventArgs) 

     AddHandler DirectCast(e.Control, Windows.Controls.DataGrid 
        ).LoadingRow, AddressOf bindejar 
    End Sub 

vincolante qualche riga di comando per ogni riga:

Private Sub bindejar(sender As Object, 
         e As Windows.Controls.DataGridRowEventArgs) 
     Dim b As Windows.Data.Binding = New Windows.Data.Binding("parametritzat") 
     b.Mode = Windows.Data.BindingMode.OneTime 
     b.Converter = New BooleanDateConverter 
     b.ValidatesOnExceptions = True 
     e.Row.SetBinding(System.Windows.Controls.Label.BackgroundProperty, b) 

    End Sub 

Grazie a:

+0

Grazie. Penso di aver lottato con il concetto generale per gli ultimi giorni. Oggi farò un altro tentativo. –

Problemi correlati