WPF конвертер просмотра списка - PullRequest
1 голос
/ 06 июля 2011

У меня есть коллекция объектов, производных от класса Person, и я хочу связать эту коллекцию с ItemsSource объекта ListView.

Я хочу указать строку для отображения в элементах ListView.Эта строка будет составной частью свойств, найденных в производных классах.

Я также хочу связать SelectedItem объекта ListView со свойством типа Person в моей модели представления.

Насколько я вижу, мне нужен преобразователь строк для моей отображаемой строки, но яЯ не уверен, как связать элементы внутри ItemsSource для генерации составной строки отображения.

Может кто-нибудь дать мне указатель?

Спасибо.

Ответы [ 3 ]

1 голос
/ 06 июля 2011

вам не нужен StringConverter, вам нужно DataTemplate

используя DataTemplate, вы можете выбрать способ отображения данных в виде элемента в вашем списке.

1 голос
/ 06 июля 2011

Если бы вы могли считать свой производный класс ViewModel, то вы могли бы просто добавить свойство к этому классу и затем отобразить его в ListView ItemTemplate.Или, как Рэйчел предложила переопределить ваш метод 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>
1 голос
/ 06 июля 2011

Вы можете либо перезаписать метод ToString() ваших производных классов для возврата вашей составной отображаемой строки, либо вы можете создать Converter, как вы предлагаете, и передать ему весь Item. Затем конвертер проверит, что элемент относится к указанному типу, и, если это так, скомпонует строку любых свойств, которые вы захотите.

...