0

私の列の1つに、ListViewまたはdatagridに表示したいリストがあります。

クラスは次のようになります。

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

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

そして、結果は次のようになります。

ここに画像の説明を入力してください

私はいくつかの異なる方法を試しましたが、どの検索語を探すべきかわかりません。私がやりたいのは、ステーションを次のようにフォーマットすることです:各medの横にある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>
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を使用します。

  • Namespaceeのインポート
  • ウィンドウリソースで値コンバータを宣言する
  • 値コンバーターを使用するようにバインディングを変更する

//名前空間をインポートしたと仮定します

<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 に答える