2011-07-06 39 views
1

我有一个从Person类派生的对象集合,我想将此集合绑定到ListView的ItemsSource。WPF listview display转换器

我想指定一个字符串显示在ListView Items中。该字符串将是在派生类中找到的属性的组合。

我也想在我的视图模型中将ListView的SelectedItem绑定到Person类型的属性。

据我所知,我需要一个字符串转换器用于显示字符串,但我不确定如何绑定到ItemsSource中的项目以生成组合显示字符串。

任何人都可以给我一个指针?

谢谢。

回答

1

您可以覆盖派生类的ToString()方法返回您的合成显示字符串,也可以像建议的那样创建Converter并将其传递给整个项目。然后转换器会检查该项目是否为指定类型,如果是,则组成一串您想要的任何属性。

+0

这是我落得这样做(重写的ToString()),所以谢客。至于通过一个转换器的整个项目,你的意思是循环转换器中的收集项目,并在那里构建我的显示字符串? – obaylis

+1

@obaylis我指的是使用像建议的Anvarbek这样的'DataTemplate',并且让你的DataTemplate类似于''。这会将ListView中的每个Person传递给Converter,以确定显示字符串将根据需要显示。 – Rachel

1

你不需要的字符串转换,你需要DataTemplate

使用DataTemplate中,你可以选择你想怎么显示你的数据在你的列表框中的项目。

+0

感谢您的回答。我最初使用了这种方法,但是当每个项目除了不同的显示字符串将基本相同时,似乎有点矫枉过正。 – obaylis

1

如果你可以考虑你的派生类是一个ViewModel,那么你可以添加一个属性到该类,然后将其显示在ListView ItemTemplate中。或者像Rachel建议覆盖您的ToString方法,然后在您的显示器绑定中,只需编写"{Binding}",这将迫使WPF调用ToString方法

例如,

public class DerivedPerson : Person 
{ 
    public string DisplayString 
    { 
    get 
    { 
     return string.Format("{0} {1}",FirstName,LastName); 
    } 
    } 
} 

你XAML:

<ListView ItemsSource="{Binding PersonList}" SelectedItem="{Binding SelectedPerson}"> 
    <ListView.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Text={Binding DisplayString}"/> 
    </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView>