ComboBox DisplayMemberPath, содержащий имя группы LINQ и встроенные элементы группы - PullRequest
1 голос
/ 23 апреля 2020

Это класс объектов:

 public class FileManagement
    {
        public string FileId { get; set; }
        public string FileName { get; set; }
        public string TypeofFileName { get; set; }
    }

Затем у меня есть список FileManagement объектов, и в моем конструкторе я группирую элементы по FileName следующим образом

IEnumerable<IGrouping<string, FileManagement>> GroupedList = FileList.GroupBy(p => p.FileName ).OrderBy(x => x.Key);

Я группирую их, потому что есть больше объектов с тем же свойством FileName, но с разными FileId и TypeofFileName.

Я объявил IGrouping<string, FileManagement> SelectedFileType, который установлен с выбранным элементом введите IGrouping<string, FileManagement> в первом ComboBox из XAML ниже.

<ComboBox ItemsSource="{Binding GroupedList }" SelectedItem="{Binding SelectedFileType}" >
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock>
                        <TextBlock.Text>
                            <MultiBinding StringFormat="{}{0}: {1}">
                                <Binding Path="Key"/>
                                <Binding Path="???some sort of string.Join"/>
                            </MultiBinding>
                        </TextBlock.Text>
                    </TextBlock>
                </DataTemplate>
            </ComboBox.ItemTemplate>
</ComboBox>
<ComboBox ItemsSource="{Binding SelectedFileType}" DisplayMemberPath="TypeofFileName"></ComboBox>

Второй ComboBox содержит свойство TypeofFileName всех элементов в выбранном IGrouping<string, FileManagement> из первого ComboBox. Это работает как задумано.

Но я также хочу установить следующую строку как DisplayMemberPath для первого ComboBox: «group_FileName: TypeofFileName1, TypeofFileName2, TypeofFileName3», где group_FileName - это имя ключа / группы, за которым следует имя Свойство TypeofFileName всех элементов этой группы (например, string.Join).
По сути, я хочу поместить в DisplayMemberPath имя группы и встроенные элементы группы.

Я думаю об использовании MultiBinding и string.Join(", ", SelectedFileType.ToList().Select(x => x.TypeofFileName)) но я не знаю, как правильно использовать его в связывании. Есть ли способ сделать это?

1 Ответ

1 голос
/ 23 апреля 2020

XAML не поддерживает вызывающие функции, такие как string.Join, но вы можете связать, например, с SelectedObiectGeneral и использовать конвертер, который вызывает string.Join и возвращает string:

<TextBlock>
    <TextBlock.Text>
        <MultiBinding>
            <MultiBinding.Converter>
                <local:YourConverter />
            </MultiBinding.Converter>
            <Binding Path="Key"/>
            <Binding Path="SelectedObiectGeneral"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

YourConverter - это просто класс, который реализует IValueConverter или IMultiValueConverter в зависимости от того, используете ли вы Binding или MultiBinding в разметке XAML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...