2017-01-12 3 views
-1

Я создаю проект mvvm wpf для N-уровня. Я хочу получить список элементов из db для отображения в списке. Я хочу привязать listbox к свойству в ViewModel (VM). Проблема в том, что привязка не работает для меня, список всегда пуст. Когда я ставлю точку останова на «return Tags», она полностью заполняется до того, как будет показана форма.Проблемы с привязкой WPF-списка

DataContext = App.ViewModel; в конструкторе MainWindow().

В моем XAML

<ListBox ItemsSource="{Binding Tags, Mode=OneWay}" Height="161" HorizontalAlignment="Left" Margin="236,6,0,0" Name="lstTags" VerticalAlignment="Top" Width="130" > 
      <ListBox.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Vertical"> 
          <TextBlock Text="{Binding Tags.Name}" /> 
          <TextBlock Text="{Binding Tags.Description}" /> 
          <!--<CheckBox IsChecked="{Binding Deleted, Mode=TwoWay}"/>--> 
         </StackPanel> 
        </DataTemplate> 
      </ListBox.ItemTemplate> 
    </ListBox> 

В моей VM: Когда я ставлю точку останова на «возвращение Теги» он полностью заполнен.

private TagCol _tags; 
public TagCol Tags 
{ 
    get { 
     TagColData tcd = new TagColData(); 
     _tags = tcd.LoadAll(); 

     //NotifyPropertyChanged("Tags"); 

     return _tags; 
    } 
    set { 
     _tags = value; 
     NotifyPropertyChanged("Tags"); 
    } 
} 

TagCol:

общественного класса TagCol { частный ObservableCollection _tagCol = новый ObservableCollection();

/// <summary>Collection (list) of Tag objects</summary> 
public ObservableCollection<Tag> Collection { 
    get { return _tagCol; } 
    set 
    { 
     _tagCol = value; 
    } 
} 

public TagCol() 
{ 

} 

}

+0

Вы установили DataContext MainWindow (или любой родительский элемент управления ListBox) в экземпляр класса вашей модели представления? – Clemens

+0

Не могли бы вы включить определение «TagCol»? –

+0

Используйте Snoop для проверки привязок и элементов управления во время выполнения. Для этого TagCol должен реализовать IEnumerable. – Will

ответ

0

Ребят это было, конечно, в связывании, его необходимо установить на Tags.Collection Кстати, в свойствах подразделов для текстовых полого Collection.Name не будет работать.

Ну, это заняло пару дней свободного времени! :)

 <ListBox ItemsSource="{Binding Tags.Collection}" Height="161" HorizontalAlignment="Left" Margin="236,6,0,0" Name="lstTags" VerticalAlignment="Top" Width="130" > 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Vertical"> 
         <TextBlock Text="{Binding Path=Name}" /> 
         <TextBlock Text="{Binding Path=Description}" /> 
         <CheckBox IsChecked="{Binding Deleted, Mode=TwoWay}"/> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
Смежные вопросы