C# 用WPF连接数据绑定列表框中的字段

C# 用WPF连接数据绑定列表框中的字段,c#,.net,wpf,listbox,C#,.net,Wpf,Listbox,首先,我要说,我对WPF和LINQ非常陌生,一直在努力学习它,同时在工作中使用它(难道你不讨厌在工作中学习东西,并在截止日期前完成项目!)。无论如何,我有一个员工列表框,它在代码中绑定到一个ObservableCollection。该集合的数据源是IQueryable类型的LINQ查询 我想做的是在列表框上显示LastName+“,“+FirstName格式,我不知道如何实现。它仅用于显示,不会以任何方式影响数据。我已经尝试为LINQ使用select new语法,但是,它不起作用,因为查询返回的

首先,我要说,我对WPF和LINQ非常陌生,一直在努力学习它,同时在工作中使用它(难道你不讨厌在工作中学习东西,并在截止日期前完成项目!)。无论如何,我有一个员工列表框,它在代码中绑定到一个ObservableCollection。该集合的数据源是IQueryable类型的LINQ查询

我想做的是在列表框上显示LastName+“,“+FirstName格式,我不知道如何实现。它仅用于显示,不会以任何方式影响数据。我已经尝试为LINQ使用select new语法,但是,它不起作用,因为查询返回的是IQueryable,并且字段不属于Employee。listbox中的对象必须是Employee对象,因为它们可以保存回数据库,或者出于不同的原因移动到表单中的其他listbox


我不知道从这里到哪里去,如果我没有说清楚,我很抱歉。如果你还有任何关于我需要做什么的问题,请直接问,我会尽力回答。谢谢

假设您有一个
可观察的集合
,其中
员工
是一个具有
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>


列表框尝试显示其项目,但
Employee
不是
ui元素
,因此它会搜索描述类型表示的模板。在
列表框
的资源中嵌入了一个
数据模板
,可以做到这一点。

您可以使用多绑定和StringFormat轻松地完成这项工作,而且视觉成本更低。 在您的列表框中

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


如果你发布代码,你会得到更好的回复。这个问题主要与WPF有关。在这种情况下,LINQ是一个麻烦。多重绑定是一个更优雅的解决方案,只有那些可以使用3.5SP1的人才能使用。