[英]Data Binding Help - WPF
I have those two classes: 我有这两节课:
class DownloadLink
{
public string Name { get; private set; }
public string Url { get; private set; }
//(...)
}
class DownloadGroup
{
public List<DownloadLink> Links { get; private set; }
//(...)
}
class Manager
{
public List<DownloadGroup> Groups { get; private set; }
}
Manager managerOBJ = new Manager();
I want to display this like that: 我想这样显示:
Everything will be in ListBox: I wan to bind managerOBJ.Groups to that ListBox. 一切都将在ListBox中:我希望将managerOBJ.Groups绑定到该ListBox。 - How to do it? - 怎么做? Than I want to create DataTamplate to display each group and all links in that group. 比我想创建DataTamplate来显示每个组和该组中的所有链接。 - How to do it? - 怎么做?
I want to do as much as possible from XAML 我想从XAML尽可能多地做
UPDATE: 更新:
This is what I got. 这就是我得到的。 It's not workig. 这不是工作。 List box is empty. 列表框为空。
<ListBox DockPanel.Dock="Right" VerticalAlignment="Stretch" Width="500" HorizontalAlignment="Right" Background="#FFE1FFF5" HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Visible" ItemsSource="{Binding Path=Groups}" Name="GroupsListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Height="30" VerticalAlignment="Top" Width="500" >
<Grid Height="Auto" Width="500">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Content="XX MB w XX plikach" HorizontalAlignment="Stretch" Margin="0"/>
</Grid>
<ListBox HorizontalAlignment="Stretch" Height="43" Margin="0,5,0,0" Width="Auto" VerticalAlignment="Top" ItemsSource="{Binding Path=Links}">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Path=Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
and in code behid I have: 在隐藏的代码中,我有:
RapideoAccount = new Rapideo();
GroupsListBox.DataContext = RapideoAccount;
The whole manager is contained in a listbox, for each downloadgroup in the manager you add an itemscontrol that contains another items control with the links in it. 整个管理器都包含在一个列表框中,对于管理器中的每个下载组,您都添加一个itemscontrol,其中包含另一个带有链接的items控件。 This can be done by using DataTemplates: 这可以通过使用DataTemplates完成:
<ListBox Name="myGroups"
ItemsSource="{Binding Path=Groups}">
<!-- each List<DownloadGroup> in the manager: -->
<ListBox.ItemTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding Path=Links}">
<!-- each Link in the Downloadgroup -->
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=Name}" />
<TextBlock Text="{Binding Path=Url}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
In code you would put: 在代码中,您应该输入:
Manager managerOBJ = new Manager();
myGroups.DataContext = managerOBJ;
managerOBJ
as a property in your viewmodel 将managerOBJ
定义为视图managerOBJ
中的属性 itemssource
to managerOBJ.Groups
. 将ListBox项目itemssource
绑定到managerOBJ.Groups
。 DataTemplate
inside ListBox to display each DownloadGroup
. 在ListBox内定义DataTemplate
以显示每个DownloadGroup
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.