我正在使用WPF在C#中创建一个小项目,我在格式化xaml文件中的数据时遇到了一些问题。
我的程序从url下载一个包含多个序列化新闻对象的xml文件,这些对象具有标题,发布日期等属性。内容等
我必须根据特定的模板在窗口中显示所有这些新闻。
在我将所有数据解析为List
新闻后,我无法弄清楚应该使用哪些控件以及如何正确使用绑定。
我想创建一个模板,我可以重复使用每个新闻对象,而不知道确切的对象数量
我搜索了一些信息,发现我需要DataTemplate控件,它应该是每个对象的图形表示,但是我不确定如何将这个模板与我的数据结合起来,一般来说,我应该在外面写什么<Window.Resources>
标记(DataTemplate
所在的位置)
一点帮助将不胜感激,
由于
PS:在我的项目的另一部分,我使用组合框做了类似的事情,但在这种情况下,我不想使用组合框,但使用更复杂的模板,文本块,标签等。 />
模板应该是这样的:
更新
ChangeLog 18/08/2016
- 更改编号1
- 更改编号2
- 更改编号N
ChangeLog 17/08/2016
- 更改编号1
- 更改编号2
- 更改编号N
ChangeLog 16/08/2016
- 更改编号1
- 更改编号2
- 更改编号N
答案 0 :(得分:1)
我将简要介绍一下如何做这个MVVM风格。所以你必须首先意识到你的视图背后有一个ViewModel。要使绑定生效,您需要将ViewModel分配给DataContext。有很多方法可以做到这一点,但我会快速而又脏。您应该了解MVVM提供解决方案的方法。
通常,您需要3种类来生成模板。 View,ViewModel和Model。该模型将是您下载的数据。 ViewModel将保存您的数据集合。 (注意:如果您计划连续下载数据并将其添加到列表中,则需要将其设置为可观察列表)。您的ViewModel通常如下所示。
public class MainViewModel
{
ObservableCollection<SimpleModel> _list = new ObservableCollection<SimpleModel>();
public ObservableCollection<SimpleModel> List
{
get { return _list; }
}
public MainViewModel()
{
_list.Add(new SimpleModel() { Name = "obj1" });
_list.Add(new SimpleModel() { Name = "obj2" });
_list.Add(new SimpleModel() { Name = "obj3" });
}
}
简单模型只是数据的占位符,但看起来像这样。
public class SimpleModel
{
public String Name { get; set; }
}
现在,在您的视图中,您需要通过将ViewModel应用于DataContext,将View连接到后面代码中的viewmodel。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainViewModel();
}
}
现在您已经使用了DataContext,您可以通过将列表应用到其中一个核心容器来显示您的列表。您还需要为您的数据类型声明一个datatemplate。 (请注意,您需要将数据类型添加到命名空间)。它看起来与此类似。
<Grid>
<Grid.Resources>
<DataTemplate DataType="{x:Type local:SimpleModel}">
<Label Foreground="Red"
Content="{Binding Name}" />
</DataTemplate>
</Grid.Resources>
<ListView ItemsSource="{Binding List}">
</ListView>
</Grid>
您所要做的就是将datatemplate的内部更改为您想要显示的内容。这将允许您以MVVM方式显示它。这只是一个简短的整体介绍,你应该阅读更多关于这一点。