如何在ListView内将两列的值连接成一列

Owa*_*ani 0 c# wpf listview mvvm

我有一个.xaml文件,它有一个listview.Listview有2个项目,它们以下列方式绑定:

<ListView  Name="listView" ItemsSource="{Binding DeviceList}" SelectedItem="{Binding ConnectedDevice, Mode=TwoWay}" >
        <ListView.View>
            <GridView>
                <GridViewColumn Width="300" Header="Name" DisplayMemberBinding="{Binding Description}" />
                <GridViewColumn Width="240" Header="Connection Status" DisplayMemberBinding="{Binding DeviceName}" />
            </GridView>
        </ListView.View>
    </ListView>
Run Code Online (Sandbox Code Playgroud)

这两种描述设备名称是ModelClass.In我ViewModel类的一部分,我能够从我已连接硬件提取设备名称及说明.

    public ObservableCollection<ComDeviceInfo> DeviceList
    {
        get { return comDevices; }
        set
        {
            comDevices = value;
            NotifyPropertyChanged("DeviceList");
        }
    }

    public ComDeviceInfo ConnectedDevice
    {
        get { return connectedDevice; }
        set
        {
            connectedDevice = value;
            NotifyPropertyChanged("ConnectedDevice");
        }
    }        

    //Called Inside Constructor
    private void checkForDevicesTimer_Elapsed(Object source, ElapsedEventArgs e)
    {            
        DeviceList = ComDeviceManagement.FindDevices();            
    }
Run Code Online (Sandbox Code Playgroud)

这里ComDeviceManagement是我的类,它有FINDDevices(),它返回devicename和description.你可以注意到上面的DeviceList = ComDeviceManagement.FindDevices(),它指示了列表中存在的描述和名称.

一切都很好.但我基本上想要的是在一列中显示Devicename和Description,而不是两列.我面临的问题是Devicename和Description.虽然它们都显示不同的值,但是它们不是一种可以将它们连接起来并将值显示在一个列中的方法吗?您可能会注意到.xaml文件中的另一列,但我想在listView的单列中显示(连接)这两列.我怎样才能做到这一点?

请帮忙!!

小智 5

使用带有格式字符串的MultiBinding.

<GridViewColumn>
    <TextBlock>
        <!-- the Text property is of type System.String -->
        <TextBlock.Text>
            <MultiBinding StringFormat="{0} {1}">
                <Binding Path="Description "/>
                <Binding Path="Name"/>
             </MultiBinding>
         </TextBlock.Text>
     </TextBlock> 
</GridViewColumn>
Run Code Online (Sandbox Code Playgroud)

使用MultiBinding必须要理解的是,如果target属性不是字符串,那么您必须提供转换器.如果它是一个字符串,你只需使用格式字符串即可.

因此,在您的情况下,您不能(通过DisplayMemberBinding轻松)使用它,您必须指定内容,如上例所示.