合并两个绑定属性?

时间:2016-06-14 19:13:28

标签: c# data-binding xamarin.forms model-binding

我有一份清单,我希望"加入"要在列表视图中显示的两个绑定属性。类似的东西:

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&amp; m_subtitulo到标签。可以帮帮我吗?

2 个答案:

答案 0 :(得分: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定义类似的属性。您可能还希望缓存计算的字符串,以避免在用户滚动列表时重新计算。但是这种添加属性的机制可以达到你想要的效果。

答案 1 :(得分:0)

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

这对你来说很有意思..