2015-10-08 1 views
0

мне нужно отобразить с привязкой к данным данных в ListView таким образом, что некоторые из клеток одного и того же столбца, подчеркнуты, а другие нет:WPF ListView столбец текста Некоторые Ряды Подчеркнуто Некоторые не

Как создать шаблон данных который будет отображать разные типы управления в одной и той же ячейке? (Visual Studio 2013, .NET 4.5.2)

XAML:

<ListView Grid.Column="3" ItemsSource="{Binding Results.MyItemSource, Mode=OneWay}"> 
    <ListView.View> 
     <GridView> 
      <GridView.Columns> 
       <GridViewColumn Width="Auto" Header=" " DisplayMemberBinding="{Binding Path=Caption, Mode=OneWay}"/> 
       <GridViewColumn Width="Auto" Header=" " DisplayMemberBinding="{Binding Path=Value, Mode=OneWay}" > 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <StackPanel /> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
      </GridView.Columns> 
     </GridView> 
    </ListView.View> 
</ListView> 

ItemSource:

public List<object> MyItemSource 
{ 
    get 
    { 
     return new List<object> 
     { 
     new CaptionValuePair {Caption = "Caption1", Value = new TextBlock {Text = "Value1"}}, 
     new CaptionValuePair {Caption = "Caption2", Value = new TextBlock {Text = "Value2", TextDecorations = TextDecorations.Underline}} 
     }; 
    } 
} 

Bound Тип:

public class CaptionValuePair 
{ 
    public string Caption { get; set; } 

    public object Value { get; set; } 
} 

Проблема: StackPanel только отображение тип текстового блока.

+0

Я не думаю, что ваша вторая колонка может отображать ничего. «StackPanel» - пустой контейнер. Как он мог показать текст? Он должен содержать некоторые такие, как «TextBlock» или «ContentPresenter», ... вы должны обновить свой код, чтобы точно отразить то, что у вас есть на вашей стороне. – Hopeless

+0

@Hopeless: я начал пробовать TextBlock вместо StackPanel, но связанный объект предоставляет свойство UIElement для значения Value, и я обнаружил, что TextBlock просто отображает тип связанного UIElement, а не содержимое. Поэтому я надеялся, что StackPanel сможет справиться с этой задачей. Во всяком случае, у меня есть рабочее решение (см. Сообщение ниже). –

ответ

0

Вместо StackPanel с использованием элемента ItemsControl и привязки его свойства ItemsSource.

XAML:

<GridViewColumn.CellTemplate> 
    <DataTemplate> 
     <ItemsControl ItemsSource="{Binding Path=Value, Mode=OneWay}" /> 
    </DataTemplate> 
</GridViewColumn.CellTemplate> 

Bound Тип:

public List<UIElement> Value{ get; set; } 
Смежные вопросы