我的程序就像一个简单的电源点程序。我不是在使用MVVM模式。
我正在将用户创建的所有幻灯片保存到XML文件中,然后再将其读回来。我的ListView存储当前在程序中创建的所有幻灯片的预览,仅在加载时加载列表中最后一张幻灯片的ListView.Items.Content。
以下是我用来读取XML文件的代码。
private void Load()
{
List<SlideItems> listProjectContents = DeSerializeObjects();
if (listProjectContents != null)
{
int loadCount = 0;
foreach (SlideItems slide in listProjectContents)
{
CreateNewSlide();
ListViewItem i = (ListViewItem)slideListView.Items[loadCount++];
BitmapSource bSource = Base64ToImage(slide.slidePreview);
Image img = new Image();
img.Source = bSource;
img.Height = 90;
img.Width = 190;
Border b = new Border();
StackPanel s = new StackPanel();
TextBlock t = new TextBlock();
t.Inlines.Add(loadCount.ToString());
s.Children.Add(t);
s.Children.Add(img);
b.Child = s;
i.Content = b;
}
}
}
任何人都可以从中看到为什么当我从XML文件加载时只显示最后一个ListView项的ListView.Items.Content?
答案 0 :(得分:1)
这段代码非常糟糕。您应该尝试了解wpf中的操作方式,而不是尝试修复它。即使由于某种原因您没有使用MVVM,您也可以(并且应该)使用数据绑定。在你的情况下,你应该
1)定义数据模板:
<ListView x:Name="slideListView">
<ListView.ItemTemplate>
<DataTemplate>
<Border>
<StackPanel>
<TextBlock Text="{Binding Text}"/>
<Image Width="190" Height="90" Source="{Binding Image}"/>
</StackPanel>
</Border>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
2)定义项目
class MyItem
{
public BitmapSource Image { get; set; }
public string Text { get; set; }
}
3)填充你的ListView
(应该使用MVVM来完成,但是很好)
private void Load()
{
slideListView.Items.Clear();
List<SlideItems> listProjectContents = DeSerializeObjects();
if (listProjectContents != null)
{
int loadCount = 0;
foreach (SlideItems slide in listProjectContents)
{
BitmapSource bSource = Base64ToImage(slide.slidePreview);
var item = new MyItem { Text = (loadCount++).ToString(), Image = bSource };
slideListView.Items.Add(item);
}
}
}