Объединить поля в ListBox с привязкой к данным с WPF - PullRequest
3 голосов
/ 30 июля 2009

Позвольте мне начать с того, что я очень новичок в WPF и LINQ и изо всех сил стараюсь научиться этому, работая над проектом с ним на работе (не противно ли вам изучать вещи на лету и выполнять проект раньше срока!). В любом случае у меня есть список сотрудников, который в коде привязан к ObservableCollection. Источником данных для коллекции является запрос LINQ типа IQueryable.

То, что я пытаюсь сделать, это показать формат LastName + "," + FirstName в списке, и я не уверен, как это осуществить. Это будет только для отображения и никак не повлияет на данные. Я попытался использовать синтаксис select new для LINQ, однако он не работает, потому что запрос возвращает IQueryable и поле не принадлежит Employee. Объекты в списке должны быть объектами Employee, потому что они могут быть сохранены обратно в базу данных или перемещены в другие списки в форме по разным причинам.

Я не уверен, куда идти здесь, и мне жаль, если я не проясняю себя. Если у вас есть какие-либо дополнительные вопросы о том, что мне нужно сделать, пожалуйста, спросите, и я постараюсь ответить. Спасибо!

Ответы [ 2 ]

2 голосов
/ 30 июля 2009

Вы можете сделать мультисвязывание и StringFormat, чтобы сделать это очень легко и с меньшими визуальными затратами В вашем ListBox

   <ListBox ItemsSource="{Binding EmployeeCollection}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock >
                    <TextBlock.Text >
                        <MultiBinding StringFormat=" {0},{1} ">
                          <Binding Path="LastName" />
                          <Binding Path="FirstName" />
                        </MultiBinding>
                    </TextBlock.Text>
                </TextBlock>
             </DataTemplate>
         </ListBox.ItemTemplate>
    </ListBox>
1 голос
/ 30 июля 2009

Если у вас есть ObservableCollection<Employee>, где Employee - это тип со свойствами LastName и FirstName, тогда что-то вроде этого должно работать:

<ListBox ItemSource="{Binding Employees}">
    <ListBox.Resources>
        <DataTemplate TargetType="{x:Type local:Employee}">
            <StackPanel>
                <TextBlock Text="{Binding Path=LastName}" />
                <TextBlock Text=", " />
                <TextBlock Text="{Binding Path=FirstName}" />
            <StackPanel>
        </DataTemplate>
    </ListBox.Resources>
</ListBox>

ListBox пытается отобразить свои элементы, но Employee не является UIElement, поэтому он ищет шаблон, описывающий представление типа. В ресурсы ListBox встроен DataTemplate, который делает именно это.

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