Объединить два обязательных свойства?
Я получил список, и я хочу, чтобы два соединяющих свойства отображались в виде списка. Что-то вроде:
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 к меткам. Можете мне помочь?
2 ответа
Решение
Вы можете привязать только свойства класса 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. Вы также можете захотеть кэшировать вычисленные строки, чтобы избежать повторного вычисления, когда пользователь прокручивает список. Но этот механизм добавления свойств будет делать то, что вы хотите.
price.SetBinding (Label.TextProperty,new Binding ("Totalprice", stringFormat: "{0} €"));
Это может быть интересно для вас..