有没有办法转换用作ItemsSource的集合的成员?

Gro*_*ile 13 wpf

在WPF中,您可以使用IValueConverter或IMultiValueConverter将数据绑定值从say转换int为aColor.

我有一个模型对象的集合,我想将它们转换为他们的ViewModel表示,但在这种情况下,

<ListBox ItemsSource="{Binding ModelItems, 
     Converter={StaticResource ModelToViewModelConverter}" />
Run Code Online (Sandbox Code Playgroud)

转换器将被写入以立即转换整个集合ModelItems.

我希望单独转换集合的项目,有没有办法做到这一点?

Ram*_*ein 26

您无法在集合本身上设置转换器,因为它会将集合作为输入.你有两个选择:

  1. 确保您的转换器也可以处理集合(IEnumerable).
  2. 在项目模板中使用转换器.

如果你想使用第二种方法,那么使用这样的东西:

<ListBox ItemsSource="{Binding ModelItems}">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <ContentPresenter Content="{Binding Converter={StaticResource ModelToViewModelConverter}}" 
                        ContentTemplate="{StaticResource MyOptionalDataTemplate}"/>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

如果您不需要自定义数据窗口,则可以跳过ContentTemplate属性.