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

Filling ListView with ObservableCollection (Windows Store App)

所以我有一个带有 ItemTemplate 的 ListView,我想用 ObservableCollection 的内容填充它,但我没有成功。

项目模板:

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

列表视图:

<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;
        }
    }

我必须写 "return null;" 因为否则我会得到错误,即并非所有代码路径 return 一个值。

谁能帮我解决这个问题?如有必要,我可以提供更多代码,但我认为问题出在 GetIngredient 代码中。当我简单地 return ObservableCollection 的第一个值并使用 TextBlock 而不是 ListView 来拾取它时,它就起作用了。

有什么想法吗?

提前致谢!

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

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

之后,我在我的代码中为列表视图提供了一个项目源:

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

已解决!