首页 > 解决方案 > UWP RadExpanderControl 正在绑定 ContentTemplate 但不是 ExpandableContentTemplate

问题描述

这里的想法是文件的每个修订版都会生成一个新文件,其名称会添加“_v1”、“_v2”等。后端从磁盘获取文件并根据该名称对它们进行分组。所以标题可能会显示“example”,然后当您单击扩展器时,您会看到“example”、“example_v1”、“example_v2”等。

但是,当这些分组数据到达前端时,只显示键,并显示扩展内容的空列表。是我的 XAML 搞砸了还是其他原因?

这是 MainPage.xaml:

<my:RadDataBoundListBox x:Name="listBox">
    <my:RadDataBoundListBox.ItemTemplate>
        <DataTemplate>
            <my1:RadExpanderControl
                Content="{ Binding }"
                ExpandableContent="{ Binding }"
                IsExpanded="True">
                <my1:RadExpanderControl.ContentTemplate>
                    <DataTemplate>
                        <TextBlock Text="{ Binding Key }" />
                    </DataTemplate>
                </my1:RadExpanderControl.ContentTemplate>
                <my1:RadExpanderControl.ExpandableContentTemplate>
                    <DataTemplate>
                        <TextBlock Text="{ Binding Name }" />
                    </DataTemplate>
                </my1:RadExpanderControl.ExpandableContentTemplate>
            </my1:RadExpanderControl>
        </DataTemplate>
    </my:RadDataBoundListBox.ItemTemplate>
</my:RadDataBoundListBox>

这是来自 MainPage.xaml.cs:

public sealed partial class MainPage : Page
{
    CollectionViewSource cvs = null;

    public MainPage()
    {
        InitializeComponent();
        cvs = new CollectionViewSource();
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        cvs.Source = ViewModel.Files;
        cvs.IsSourceGrouped = true;
        listBox.ItemsSource = (IOrderedEnumerable<IGrouping<string, Files>>)cvs.Source;
    }
}

这是来自 ViewModel:

private IOrderedEnumerable<IGrouping<string, Files>> files;

public IOrderedEnumerable<IGrouping<string, Files>> Files
{
    get
    {
        if (files ==  null)
        {
            var source = Source;
            string[] separaters = { "_", "." };
            files = from file in source
                    group file by file.Name.Split(separaters, StringSplitOptions.RemoveEmptyEntries)[0]
                    into g
                    orderby g.Key
                    select g;
        }

        return files;
    }
}

这是从磁盘中提取文件名列表的方式:

public ObservableCollection<Files> Source
{
    get
    {
        return GetFilesData(Folder).Result;
    }
}

这是文件名的模型:

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

在此处输入图像描述

标签: c#xamluwpbindingtelerik

解决方案


推荐阅读