用 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;
已解决!
所以我有一个带有 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;
已解决!