将索引值传递给XAML绑定表达式中的集合

时间:2018-10-04 12:48:23

标签: c# xamarin.forms

我正在Visual Studio 2017中使用Xamarin.Forms进行编码。

我可以将标签和按钮的“文本”属性绑定到字符串,使用INotifyPropertyChanged并为我的按钮实现Command接口,很酷,一切都很好而且很花哨。

我的ViewModel中有一个集合,该集合本质上是我的View所引用的类,该类是XAML页面。

我现在想要做的是将标签绑定到我的字符串集合的特定索引。

所以我在VM(c#类)中有这个

public List<string> MessageCollection;

这在“视图”(“ XAML内容”页面)中

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

我已经搜索了一段时间,并在Stack-O上检查了其他问题,但是没有找到我问题的明确答案。

我想做的是这样的:

<Label Text="{Binding MessageCollection[0]}"/>

<Label Text="{Binding MessageCollection, Index="0"}"/>

继续进行

<Label Text="{Binding MessageCollection[0]}"/>
<Label Text="{Binding MessageCollection[1]}"/>
<Label Text="{Binding MessageCollection[2]}"/>

以此类推。

将在运行时修改列表,因为用户可以通过按钮和输入字段添加和删除字符串以及编辑这些字符串的内容。

在绑定表达式中按索引引用集合的好方法是什么?

3 个答案:

答案 0 :(得分:0)

此语法应该有效

<Label Text="{Binding MessageCollection[0]}"/>

但是,您只能绑定到公共属性,因此需要使用吸气剂声明MessageCollection

public List<string> MessageCollection { get; set; }

答案 1 :(得分:0)

您可以尝试以下战斗。

示例代码

List<string> messageCollection;
string message = string.empty;
message = messageCollection.indexOf(your specific index no);

从上面的代码中,您可以从消息集合中检索特定的字符串。现在您可以将“ message”字符串绑定到您的视图。

答案 2 :(得分:0)

尝试使用以下转换器...

public class ListToFirstObjectGetter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is System.Collections.IList list)
            {
                return list[0];
            }
            return null;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }