2010-05-31 2 views
0

Я работаю в некотором коде, используя wpf и начинаю использовать mvvm. Пока у меня нет проблем, когда у меня есть один элемент, и я должен показать его значения на экране (привязка определенного имени свойства). Но теперь я должен работать со списком свойств, не зная его имен. Поэтому я создал класс с именем GClass, который имеет только две пробиотики, имя и значение. Я создал ObservableCollection и наполнил теперь прямыми значениями и присвоил datacontext представления (lstview) с созданным мной объектом. Но я не вижу никакого результата, он всегда показывает пустой список. Может ли кто-нибудь сказать мне, видите ли, почему это происходит?Проблема Привязка ObservableCollection к ListBox в WPF/MVVM

Код C#

  VDt = new ObservableCollection<GClass>(); 
     var vhDt = message.SelectSingleElement(typeof (Vh)) as Vehiculo; 

     if(vhDt != null) 
     { 
      VDt.Add(new GClass() {Name = "Numero: ", Value = ""}); 
      VDt.Add(new GClass() {Name = "Marca: ", Value = ""}); 
      VDt.Add(new GClass() {Name = "Conductor: ", Value = ""}); 

      lstview.DataContext = this; 
      _regionManager.RegisterViewWithRegionInIndex(RegionNames.MainRegion, lstview, 0); 

Код зрения

<ListBox Margin="5,5,5,25" ItemsSource="{Binding VDt}"> 
     <ListBox.Template> 
      <ControlTemplate>      
       <ListViewItem Content="{Binding Name}"></ListViewItem> 
       <ListViewItem Content="{Binding Value}"></ListViewItem> 
      </ControlTemplate> 
     </ListBox.Template> 
    </ListBox> 

У меня есть исследования здесь, но я не могу видеть, что я делаю неправильно. Я буду ценить, если кто-то мне поможет.

+0

Вы видите заполненный список или нет? –

+0

Я вижу пустую коробку, без элемента или полосы прокрутки вообще, как вы видите список на экране дизайна – alexqs

ответ

1

Несколько вещей здесь:

Во-первых, <ListBox.Template> позволяет описать шаблон для того, как вы хотите, чтобы сделать сам ListBox. То, что вы пытаетесь сделать (на первый взгляд) является визуализации элементов внутри списка, так что вам нужно <ListBox.ItemTemplate>

Во-вторых, в ItemTemplate, вам нужно создать, а не <ControlTemplate>, а скорее <DataTemplate>

Последняя вещь Лично я хотел бы использовать Полностью соответствует цели управления в пределах моих DataTemplates, чтобы сделать точку (например TextBlocks вместо ListViewItems)

Так что ваш XAML должен выглядеть примерно так:

<ListBox Margin="5,5,5,25" ItemsSource="{Binding VDt}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding Name}" /> 
       <TextBlock Text="{Binding Value}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Надеюсь, что это поможет :) Ian

+0

Спасибо! Он работает отлично. Я даже вижу, что вы можете взять ... вне, и заменить его с поэтому у вас есть общий вид контейнера, и сделать детали в определенной точки зрения – alexqs

+0

@alexqs Вы уверены, что можно :) – kiwipom

+0

текст статьи применима привязки в этой форме, может быть желательно вложить текстовые блоки для сохранения правильной компоновки текста (обертка, интервал и т. д.). Попробуйте следующее: Gusdor

Смежные вопросы