2016-06-14 3 views
0

У меня есть список, и я хочу «присоединиться» к двум свойствам привязки для отображения в списке. Что-то вроде:Объединить два связывающих свойства?

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

и класс ListView это что-то вроде:

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; 
    } 

Но, таким образом я получаю NullArgumentException добавление m_titulo & m_subtitulo до меток. Может мне помочь?

+0

Я не согласен, что это точная копия. В ссылочном вопросе перечислены многие коренные причины нулевых ссылочных исключений, но это не касается этого - что и происходит, если вы используете привязку данных Xamarin для привязки к имени, которое не является членом типа контекста привязки. В результате ни одно из средств защиты, описанных в этой публикации, не применимо для ситуации ОП. – DavidS

ответ

0

Вы можете связать только свойства класса T. Таким образом, в вашем случае, вы могли бы изменить T быть что-то вроде:

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); 
     } 
    } 
} 

, а затем в lvClientes, связывание для lblTitulo будет:

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

Вам нужно будет определить аналогичное свойство для subtitulo. Вы также можете кэшировать вычисленные строки, чтобы избежать перекомпоновки, когда пользователь прокручивает список. Но этот механизм добавления свойств будет делать то, что вы хотите.

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

Это может быть интересно для вас ..