无论如何我可以将两个值绑定到我的XAML中吗?

时间:2016-04-27 17:54:18

标签: c# xamarin xamarin.forms

我有一个listview,并将从数据库获取的值绑定到我的XAML。我现在将一个值绑定到我的XAML中,但我希望绑定两个值,是可能还是只能在代码中?如果是这样,我将如何实现这一目标。

这是我的代码:

    public class items
    {
        public string infoOne { get; set;}
        public string infoTwo { get; set;}
    }

    async void loadList ()
    {

        var getItems = await phpApi.getEvents ();


        theList = new List <items> ();
        foreach (var currentitem in getItems["results"]) {

            theList.Add (new items () {

                infoOne = currentitem ["name"].ToString (), 
                infoTwo = currentitem ["phone"].ToString ()
            });

       mylist.ItemsSource = theList;

     }

XAML:

        <Label Text = "{Binding infoOne}" /> //How could I add infoTwo to the same label and also add a space between them?

5 个答案:

答案 0 :(得分:5)

不幸的是,这不支持(但是?)。正如Pheonys所说,你可以在WPF中执行此操作,但不能在Xamarin.Forms中执行此操作。

如果要绑定到一个ViewModel中的两个属性,则应创建另一个属性,如下所示:

<Label Text = "{Binding infoFull}" />

只需将您的商品类更改为此。

您的XAML将是这样的:

{{1}}

答案 1 :(得分:0)

您可以添加get-only属性并绑定到该属性。

public string combinedInfo { get; } = $"{infoOne} {infoTwo}";

答案 2 :(得分:0)

做出一些假设(因为我没有在Xamarin中播放),在WPF XAML中你可以使用多绑定类和字符串格式化器。

MultiBinding Class (MSDN)

这样做的一个例子可以在这个堆栈溢出问题的答案中找到:How to bind multiple values to a single WPF TextBlock?

答案 3 :(得分:0)

没有对MultiBinding的内置支持,但您可以使用Xamarin.Forms.Proxy库来实现它。

    <Label.Text>
      <xfProxy:MultiBinding StringFormat="Good evening {0}. You are needed in the {1}">
        <Binding Path="User" />
        <Binding Path="Location" />
      </xfProxy:MultiBinding>
    </Label.Text>

答案 4 :(得分:0)

您是否尝试过以下操作?

public class items
{
    public string infoOne { get; set;}
    public string infoTwo { get; set;}
    public string infoOneAndinfoTwo {get; set;}
}

async void loadList ()
{

    var getItems = await phpApi.getEvents ();


    theList = new List <items> ();
    foreach (var currentitem in getItems["results"]) {

        theList.Add (new items () {

            infoOne = currentitem ["name"].ToString (), 
            infoTwo = currentitem ["phone"].ToString (),
            infoOneAndinfoTwo = infoOne + " " + infoTwo
        });

   mylist.ItemsSource = theList;

 }

XAML:

<Label Text = "{Binding infoOneAndinfoTwo}" />