当我尝试从“列表”屏幕传递列表的selectedIndex时,我遇到了问题。
在我的列表屏幕上,我有以下绑定:
代码背后:
lbPrograms.ItemsSource = App.ViewModel.Items;
XAML:
<ListBox x:Name="lbPrograms" ItemsSource="{Binding Items}" SelectionChanged="lbPrograms_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel x:Name="DataTemplateStackPanel" Orientation="Horizontal">
<Image x:Name="ItemImage" Source="/images/ArrowImg.png" Height="43" Width="43" VerticalAlignment="Top" Margin="10,0,20,0"/>
<StackPanel>
<TextBlock x:Name="ItemText" Text="{Binding programName}" Margin="-2,-13,0,0" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
<TextBlock x:Name="DetailsText" Text="{Binding createDate}" Margin="0,-6,0,3" Style="{StaticResource PhoneTextSubtleStyle}"/>
<TextBlock x:Name="programId" Text="{Binding programId}" Margin="0,-6,0,3" Style="{StaticResource PhoneTextSubtleStyle}"/>
</StackPanel>
<!--<Image x:Name="ItemFavs" Source="/images/favs.png" Height="43" Width="43" VerticalAlignment="Top" Margin="10,0,20,0"/>
<Image x:Name="ItemDelete" Source="/images/delete.png" Height="43" Width="43" VerticalAlignment="Top" Margin="10,0,20,0"/>-->
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
在我的详细信息屏幕中,我使用selectedIndex值查找:
App.ViewModel.Refresh();
DataContext = App.ViewModel.Items[index].nValDictionary;
但是,由于我无法弄清楚如何更新iEnumerable集合中的值,我一直在删除[index],然后重新添加到集合中。 那么有谁能告诉我,如何使用更新我的收藏中的现有元素?如果没有,我可以传递programId(在我的绑定中)而不是selectedIndex,因为在删除/添加功能之后索引会变得混乱。
请告知。
更新
在几个论坛发言后,我应该清楚我在我的对象中的属性上实现了INotifyChanged事件。
基本上,以下代码片段是我当前的问题:
private void FavBtn_Click(object sender, EventArgs e)
{
foreach (var item in App.ViewModel.Items)
{
if ((item.currentProgram == true) && (item.programId != index))
{
item.currentProgram = false;
}
if (item.programId == index)
{
item.currentProgram = true;
}
}
当我跑步时,一切看起来都没问题。
但是,当我导航到另一个页面时,我重新加载对象并且更改将丢失。这几乎就像我需要在导航之前保存它们,但是,如果我做一个item.Save();我的列表中有重复项。
答案 0 :(得分:2)
我猜你还没有在你的Items类上实现INotifyPropertyChanged。
实现此功能将允许通过数据绑定更新这些对象中的更新。
以下是有关如何实现INotifyPropertyChanged的演练。
答案 1 :(得分:1)
类型为ObservableCollection<T>
的App.ViewModel.Items
?
如果是这样,当您修改其中一个集合项的属性并引发一个属性更改事件(via INotifyPropertyChanged),指示您的ListBox.ItemsSource绑定的集合属性时,DataTemplate绑定将执行其余操作