2012-07-14 47 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爲綁定列表中的屬性。

希望這會有所幫助。

問候