2016-06-14 14 views
0

Ich habe eine Liste und ich möchte zwei Bindungseigenschaften verbinden, um sie in einer Listenansicht anzuzeigen. Etwas wie:Zwei Bindungseigenschaften zusammenführen?

public class T 
{ 
    public string nit { get; set; } 
    public string nombrecliente { get; set; } 
    public string nombresitio { get; set; } 
    public string direccion { get; set; } 
} 

und die Listview-Klasse ist so etwas wie:

Label lblTitulo, lblSubTitulo; 
    listview.ItemsSource = List<T>; 
    T objT = new T(); 

    string m_titulo = ""; 
    string m_subtitulo = ""; 

    public lvClientes() 
    { 
     m_titulo = agregarTexto (m_titulo, "NIT: " + objT.nit); 
     m_titulo = agregarTexto (m_titulo, "Cliente: " + objT.nombrecliente); 


     m_subtitulo = agregarTexto (m_titulo, "Sitio: " + objT.nombresitio); 
     m_subtitulo = agregarTexto (m_titulo, "Dirección: " + objT.direccion); 

     lblSubTitulo.SetBinding (Label.TextProperty, m_subtitulo); 
     lblTitulo.SetBinding(Label.TextProperty, m_titulo; 
    } 

    private string agregarTexto (string textoOriginal, string textoAgregar) 
    { 
     if (!textoAgregar.Equals ("")) 
     { 
      if (textoOriginal.Equals ("")) 
      { 
       textoOriginal = textoAgregar.Replace ("\n", ", "); 
      } 
      else 
       textoOriginal += "\n" + textoAgregar.Replace ("\n", ", "); 
     } 
     return textoOriginal; 
    } 

Aber diese Weise ich eine NullArgumentException erhalten Hinzufügen m_titulo & m_subtitulo zu einer Etiketten. Kann mir helfen?

+0

Ich bin nicht einverstanden, dass dies ein exaktes Duplikat ist. Die referenzierte Frage listet viele Ursachen von NULL-Referenzausnahmen auf, behandelt diese jedoch nicht. Dies geschieht, wenn Sie die Xamarin-Datenbindung zum Binden an einen Namen verwenden, der kein Mitglied des Bindungskontexttyps ist. Folglich sind keine der in diesem Posten beschriebenen Abhilfemaßnahmen für die Situation des OP anwendbar. – DavidS

Antwort

0

Sie können nur auf die Eigenschaften der Klasse T. binden Also in Ihrem Fall könnten Sie T modifizieren so etwas wie zu sein:

public class T 
{ 
    public string nit { get; set; } 
    public string nombrecliente { get; set; } 
    public string nombresitio { get; set; } 
    public string direccion { get; set; } 
    public string titulo { 
     get { 
      var temp = agregarTexto ("", "NIT: " + nit); 
      return agregarTexto (temp, "Cliente: " + nombrecliente); 
     } 
    } 
} 

Und dann in lvClientes, würde die Bindung für lblTitulo sein:

lblTitulo.SetBinding(Label.TextProperty, "titulo"); 

Sie müssten eine ähnliche Eigenschaft für Untertitel definieren. Sie können die berechneten Zeichenfolgen auch zwischenspeichern, um ein Neuberechnen zu vermeiden, während der Benutzer durch die Liste scrollt. Aber dieser Mechanismus zum Hinzufügen von Eigenschaften wird tun, was Sie wollen.

0
price.SetBinding (Label.TextProperty,new Binding ("Totalprice", stringFormat: "{0} €")); 

Dies kann für Sie interessant sein ..