如何将两个不同列表中的两个对象绑定到Xaml中的一个ListView控制器?

时间:2016-03-10 08:19:33

标签: xaml xamarin.forms

所以我有两个列表,一个是作者的名字,另一个是引用。 我需要两个进入相同的ListView控制器。名称和引用来自两个不同的列表,它必须是这样的。

<ListView x:Name ="CategoryListView" ItemsSource ="{Binding Authors, Binding Quotes}" HasUnevenRows="True">
    <ListView.ItemTemplate>
      <DataTemplate >
        <ViewCell >
          <ViewCell.View >
            <StackLayout>
              <StackLayout Orientation="Horizontal" Padding="10">
                <Label Text ="{Binding AuthorName}" FontSize="10" TextColor="White"/>
                <Label Text="{Binding QuoteContent}" FontSize="10" TextColor="White"/>
              </StackLayout>
            </StackLayout>
          </ViewCell.View>
        </ViewCell>
      </DataTemplate>
    </ListView.ItemTemplate>
  </ListView>

这就是我尝试过的方式,但它并没有起作用。 这是我的代码:

public QuotePageViewModel(string category, IEnumerable<Quote> qoutes, List<Author> matchingAuthors) 
{ 
Category = category; 
Quotes = new List<Quote>(); 
Quotes = qoutes.ToList(); 
Authors = new List<Author>();
Authors = matchingAuthors.ToList();
}

1 个答案:

答案 0 :(得分:1)

这是我的建议: 将List绑定到Dictionary。 我们将你的标签绑定到字典的Key和Value,在你的Xaml中只需这样做:

<ListView x:Name ="CategoryListView" HasUnevenRows="True">
<ListView.ItemTemplate>
  <DataTemplate >
    <ViewCell >
      <ViewCell.View >
        <StackLayout>
          <StackLayout Orientation="Horizontal" Padding="10">
            <Label Text ="{Binding Key}" FontSize="10" TextColor="White"/>
            <Label Text="{Binding Value}" FontSize="10" TextColor="White"/>
          </StackLayout>
        </StackLayout>
      </ViewCell.View>
    </ViewCell>
  </DataTemplate>
</ListView.ItemTemplate>

现在填写一个带有作者和引号的字典(假设引号和教父的长度相同且索引匹配,因此引用[0]匹配作者[0])。并将其添加为列表的ItemsSource:

 var dict = new Dictionary<string, string>();
 for(int i = 0; i<quotes.Count; i++)
 {
     dict.Add(Authors[i], quotes.ElemetAt(i));
 } 
 CategoryListView.ItemsSource = dict;

这应该对你有用,但请记住,Dictionary没有实现INotifyPropertyChanged,因此在运行期间内容的更改将不会显示