使用caliburn.micro </string>在datagrid的列中绑定列表<string>

时间:2013-03-25 18:30:48

标签: c# wpf list caliburn.micro datagridcolumn

我的课是这样的:

public class Articolo : Screen
{
        public string Code { get; set; }
        public string Description { get; set; }
        public decimal Cost{ get; set; }
        public decimal Price{ get; set; }
        public List<Ean> BarCode { get; set; }
}

和这个Ean班:

public class Ean
{
    public string Code{ get; set; }
}

我的数据网格是:

<DataGrid Height="367" HorizontalAlignment="Stretch" Margin="14,52,12,0"
         VerticalAlignment="Top" AutoGenerateColumns="False" x:Name="List" >
       <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Code}" Header="Codice" />
            <DataGridTextColumn Binding="{Binding Description }" Header="Descrizione" />
            <DataGridTextColumn Binding="{Binding Cost}" Header="Quantita" />
            <DataGridTextColumn Binding="{Binding Price}" Header="Prezzo" />
            <DataGridTextColumn Binding="{Binding BarCode}" Header="BarCodes" />
        </DataGrid.Columns>
</DataGrid>

他是ViewModel的一部分:

    [Export(typeof(IScreen))]
    public class BolleViewModel : Screen
    {
        public List<Articolo> List { get; private set; }

        public BViewModel()
        {
            Recover recover = new Recover();
            List = recover.Import();
            NotifyOfPropertyChange("List");
        }
    }

在BarCodes列中写入(Collection)!而不是条形码。 为什么?如何查看列中的条形码列表?感谢..

1 个答案:

答案 0 :(得分:1)

BarCodeList<T>,而ToString()的{​​{1}}方法本身并不显示列表的内容。

您可以做的最简单的事情可能是实施IValueConverter并在List<T>绑定中应用此转换器。

首先,转换器看起来像这样:

BarCode

然后,您需要在视图中添加转换器实例作为资源:

public class EanListToStringConverter : IValueConverter {
   public object Convert(object value, Type targetType, 
                         object parameter, CultureInfo culture) {
      return String.Join(" ", ((List<Ean>)value).Select(ean => ean.Code));
   }
   public object ConvertBack(object value, Type targetType, 
                             object parameter, CultureInfo culture) {
      return NotSupportedException();
   }
}

最后在你的<Grid.Resources> <converters:EanListToStringConverter x:Key="EanListToString"/> </Grid.Resources> 绑定中调用这个实例,如下所示:

BarCode