【问题标题】:C# data binding nested ItemsControl wpfC#数据绑定嵌套ItemsControl wpf
【发布时间】:2016-11-24 17:57:22
【问题描述】:

我想构建一个这样的用户界面(视频编辑器的时间线)

我有所有课程:

public class Timeline
    {
        public Timeline()
        {
            groups = new ObservableCollection<Group>();
        }
        public ObservableCollection<Group> groups { get; set; }

    }

public class Group
{
    public string Name { get; set; }

    public TrackGroup()
    {
        tracks = new List<Track>();
    }

    public List<Track> tracks { get; set; }
}

public class Track
{
    public Track()
    {
        units= new ObservableCollection<Unit>();
    }
    public ObservableCollection<Unit> units { get; set; }
}

public class Unit
{
    public string unitName { get; set; }
}

在 Main 我有这个:

public Timeline timeline = new Timeline();
public Unit unit = new Unit();
public Track track = new Track();
public Group group = new Group();
track.units.Add(unit);
group.tracks.Add(track);
timeline.groups.Add(group);

在 Main.xaml 中(不完整,因为它不起作用)

<ListBox
        HorizontalContentAlignment="Stretch"
        ItemsSource="{Binding timeline.groups}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <DockPanel LastChildFill="True">
                            <ItemsControl ItemsSource="{Binding timeline.groups.tracks}">
                                <ItemsControl.ItemTemplate >
                                    <ItemsControl ItemsSource="{Binding timeline.groups.tracks.units}">
                                        <ItemsControl.ItemTemplate >
                                        </ItemsControl.ItemTemplate >
                                    </ItemsControl>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                        </DockPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

如何绑定每个 itemssource?因为timelinegrouptrack都是list,所以需要在ItemsControl中展示出来。我很困惑

【问题讨论】:

    标签: c# wpf xaml data-binding itemscontrol


    【解决方案1】:

    您不需要在内部列表中使用“完整”路径进行绑定。

    因为当您绑定一些 ItemControl 并尝试为其项目设置样式时,请记住每个项目已经是您用作 ItemsSource 的集合示例

    编辑1:
    Window.xaml.cs 文件:

    Timeline timeline = new Timeline();
    Unit unit1 = new Unit() {unitName = "1"};
    Unit unit2 = new Unit() {unitName = "2"};
    Track track = new Track();
    Group group = new Group();
    track.units.Add(unit1);
    track.units.Add(unit2);
    group.tracks.Add(track);
    timeline.groups.Add(group);
    list.DataContext = timeline;
    

    如果您想使用 VM,我没有使用 VM,只需将其添加到窗口的数据上下文并绑定列表即可。 Xaml:

    <ListBox HorizontalContentAlignment="Stretch"
                 Name="list"
                 ItemsSource="{Binding groups}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <DockPanel LastChildFill="True">
                        <ItemsControl ItemsSource="{Binding tracks}">
                            <ItemsControl.ItemTemplate >
                                <DataTemplate>
                                    <ItemsControl ItemsSource="{Binding units}">
                                        <ItemsControl.ItemTemplate>
                                            <DataTemplate>
                                                <TextBox Text="{Binding unitName}"/>
                                            </DataTemplate>
                                        </ItemsControl.ItemTemplate>
                                    </ItemsControl>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </DockPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    

    只是风格,经过测试。如果您将使用带有Timeline 属性更改绑定到'timelinePropertyName'.groups 的VM

    并阅读有关绑定的更多信息。

    【讨论】:

    • 它在“绑定时间线.组”中不起作用。我在主类中使用“datacontext = this”,对吗?
    • 更新答案。
    【解决方案2】:

    尝试将适当的成员大写。 WPF 区分大小写。

    【讨论】:

      猜你喜欢
      • 2014-09-24
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      • 1970-01-01
      相关资源
      最近更新 更多