2012-07-14 34 views
0

在我的一个列中,我有一个List,我想在ListView或DataGrid中显示。Listview/DataGrid返回{collection}

类的样子:

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

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

这里是胜负的样子:

enter image description here

我已经尝试了几种不同的方式,但我不知道有什么搜索词寻找。我想要做的是将这些电台格式化为如下形式:ER,ICU,Foo,Bar,

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

回答

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

    然后使用ValueConverter在XAML

  • 导入Namespacee
  • 在自己的窗口资源的声明正值转换器
  • 修改你的绑定使用值转换器

// assumming导入的命名空间

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

这样做的好处是,你得到你想要的结果,而不用用户界面特定属性污染你的课程。

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为绑定列表中的属性。

希望这会有所帮助。

问候

相关问题