0

在我的一个专栏中,我有一个想要在 ListView 或数据网格中显示的列表。

该类看起来像:

class Cab
{
    public Cab()
    {
        Stations = new List<string>();
    }

    public string Medication { get; set; }
    public List<string> Stations { get; set; }
}

结果如下:

在此处输入图像描述

我尝试了几种不同的方法,但我不知道要查找什么搜索词。我想做的是将工作站格式化为如下所示的内容:ER、ICU、Foo、Bar 旁边的每个 med。

<ListView x:Name="myCab">
    <ListView.View>
        <GridView>
            <GridViewColumn Width="140" Header="Medication" DisplayMemberBinding="{Binding Medication}" />
            <GridViewColumn Width="140" Header="Stations" DisplayMemberBinding="{Binding Stations}">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding}"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Width="140" Header="Column 3" />
        </GridView>
    </ListView.View>
</ListView>
4

2 回答 2

0

您可以将您的课程更改为

class Cab
{
    public Cab()
    {
        Stations = new List<string>();
    }

    public string Medication { get; set; }
    public List<string> Stations { get; set; }

    public string StationsToString
    {
        set {}
        get { return string.Join(",", this.Stations.ToArray()); }
    }
}

然后你设置StationsToString为绑定列表的属性。

希望这可以帮助。

问候

于 2012-07-14T22:37:36.140 回答
0

我会使用ValueConverter

基本上第一步是创建ListToStringConverter实现的类IValueConverter

using System.Windows.Data;
using System.Collections; 

namespace myNameSpace
{
   public class ListToStringConverter : IValueConverter
   {
      public object Convert(object value, Type targetType, object parameter,
            System.Globalization.CultureInfo culture) 
      {
         string returnValue = string.Empty; 
         List<string> targetList = value as List<string>; 

         foreach(string s in targetList)
         {
           if(!returnValue == string.Empty)
              returnValue += ", " + s; 
           else 
              returnValue += s; 
         }

         return returnValue; 
      }     

        public object ConvertBack(object value, Type targetType, 
    object parameter, System.Globalization.CultureInfo culture)
       {
          List<string> returnValue = new List<string>(); 

          string input = value as string; 
          returnValue.AddRange(input.Split(",")); 

          return returnValue; 
       }
   }
} 

然后在你的 XAML 中使用 ValueConverter

  • 导入命名空间
  • 在你的窗口资源中声明你的价值转换器
  • 修改绑定以使用值转换器

// 假设你导入了命名空间

<Window>
<Window.Resources>
    <local:ListToStringConverter x:Key="listFormatter" /> 

</Window.Resources>

<ListView x:Name="myCab">
    <ListView.View>
        <GridView>
            <GridViewColumn Width="140" Header="Medication" DisplayMemberBinding="{Binding Medication}" />
            <GridViewColumn Width="140" Header="Stations" DisplayMemberBinding="{Binding Path=Stations Converter={StaticResource listFormatter}}">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding}"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Width="140" Header="Column 3" />
        </GridView>
    </ListView.View>
</ListView>
</Window>

这样做的美妙之处在于,您可以在不使用 UI 特定属性污染您的类的情况下获得您想要的结果。

于 2012-07-14T22:57:06.700 回答