【问题标题】:Data Binding Help - WPF数据绑定帮助 - WPF
【发布时间】:2011-03-21 16:43:06
【问题描述】:

我有这两个类:

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();

我想这样显示:

所有内容都将在 ListBox 中: 我想将 managerOBJ.Groups 绑定到那个 ListBox。 - 怎么做? 比我想创建 DataTamplate 来显示每个组和该组中的所有链接。 - 怎么做?

我想从 XAML 做尽可能多的事情

更新:

这就是我得到的。这不是工作。列表框为空。

    <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>

在代码中我有:

RapideoAccount = new Rapideo();
GroupsListBox.DataContext = RapideoAccount;

【问题讨论】:

  • 查看问题右侧显示的相关问题。你一直在问很多重复的问题,这些问题都快结束了。坦率地说,让我们所有人都流泪了。你最好提防可怕的用户禁令脚本,meta.stackexchange.com/questions/56817/…

标签: c# .net wpf data-binding binding


【解决方案1】:

整个管理器包含在一个列表框中,对于管理器中的每个下载组,您添加一个项目控件,其中包含另一个项目控件和其中的链接。 这可以通过使用 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>

在代码中你会写:

Manager managerOBJ = new Manager();
myGroups.DataContext = managerOBJ;

【讨论】:

  • Rapideo到底是什么,是你之前的那个Manager吗?
【解决方案2】:
  1. 在您的视图模型中将managerOBJ 定义为属性
  2. 将视图模型绑定到您的视图。
  3. 将 ListBox itemssource 绑定到 managerOBJ.Groups
  4. 在 ListBox 中定义 DataTemplate 以显示每个 DownloadGroup

【讨论】:

    猜你喜欢
    • 2011-09-28
    • 2010-11-17
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 2011-03-16
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多