使用ObservableCollection填充ListView(Windows应用商店应用)

时间:2015-07-27 15:48:18

标签: listview data-binding observablecollection

所以我有一个带有ItemTemplate的ListView,我希望用ObservableCollection的内容填充这些内容,并且我没有成功。

ItemTemplate:

<Page.Resources>
    <DataTemplate x:Key="templateIngredient">
        <TextBlock Text="{Binding GetIngredient}"></TextBlock>
    </DataTemplate>
</Page.Resources>

ListView:

<ListView x:Name="listViewIngredienten" ItemTemplate="{StaticResource templateIngredient}" SelectionMode="None">
                <ListView.ItemContainerStyle>
                    <Style TargetType="ListViewItem">
                        <Setter Property="Margin" Value="0,-5,0,-5"></Setter>
                    </Style>
                </ListView.ItemContainerStyle>
            </ListView>

数据源:

    public class RecipeDataItem
{
    public String UniqueId { get; set; }
    public String Title { get; set; }
    public String ShortTitle { get; set; }
    public String Country { get; set; }
    public String Directions { get; set; }
    public int Preptime { get; set; }
    public int Rating { get; set; }
    public int ImageId { get; set; }

    public ObservableCollection<String> Ingredients { get; set; }

        public String GetIngredient
    {
        get
        {
            foreach (var ingredient in Ingredients)
            {
                return ingredient;
            }
            return null;
        }
    }

我必须写&#34;返回null;&#34;因为我得到的错误是并非所有代码路径都返回一个值。

任何人都可以帮我解决这个问题吗?如果需要,我可以提供更多代码,但我认为问题在于GetIngredient代码。当我简单地返回ObservableCollection的第一个值并使用TextBlock而不是ListView来获取它时,它可以工作。

有什么想法吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

对于那些关心的人,我的错误是数据模板中的绑定。我将它绑定到我的类中的函数(getIngredient),而它应该只是{Binding}。

<Page.Resources>
<DataTemplate x:Key="templateIngredient">
    <TextBlock Text="{Binding}"></TextBlock>
</DataTemplate>

之后我在listview中给了listview一个项目源:

private async void navigationHelper_LoadState(object sender, LoadStateEventArgs e) { var item = RecipeDataSource.getItem((String)e.NavigationParameter); this.DefaultViewModel["Item"] = item; listViewIngredienten.ItemsSource = item.Ingredients;

解决!