2014-11-20 4 views
-1

Я использую вложенную ListBox для привязки данных, Это мой ListBoxСписок WPF внутри списка Binding

<ListBox x:Name="lst1" ItemsSource="{Binding ListDS}" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Disabled" > 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Vertical" Margin="10"> 
       <TextBlock Text="{Binding Name}"/> 
       <ListBox Height="300" Width="200" ItemsSource="{Binding userFiles }" Margin="0,10" > 
        <ListBox.ItemTemplate> 
         <DataTemplate> 
          <StackPanel Margin="0,10,0,0"> 
           <TextBlock Text="{Binding Name}"/> 
          </StackPanel> 
         </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 
       <Button Content="Print" Width="75" HorizontalAlignment="Right" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Margin="0,0,0,0" Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 

Это мои объекты

public class UsersInfo 
{ 
    public long Id { get; set; } 
    public string Name { get; set; } 
    public DateTime DateCreated { get; set; } 
    public DateTime DateUploaded { get; set; } 
    public List<UsersFiles> userFiles { get; set; } 
} 
public class UsersFiles 
{ 
    public long Id { get; set; } 
    public string Name { get; set; } 
    public DateTime DateCreated { get; set; } 
    public DateTime DateDownloaded { get; set; } 
} 

и в моем ViewModel, у меня есть

public List<UsersInfo> ListDS{ get; set; } 

Я инициализирую его в конструкторе ViewModel, и это то, как я заполняю данные

UsersInfo entity = new UsersInfo(); 
entity.MediaFiles = new List<UsersFiles>(); 
UsersFiles mFiles = new UsersFiles();       
mFiles.Name = "abc"; 
mFiles.Id = 1 
entity.Name = "User name"; 
entity.MediaFiles.Add(mFiles); 
ListDS.Add(entity); 

Проблема в том, что ListBox отображается пустым, на нем ничего не отображается, даже кнопка «Печать». Когда я добавил в него ListBoxItem, он отлично показывает. Где я ошибаюсь в привязке данных?

+0

Какова ваша модель? где вы устанавливаете DataContext? точный порядок установки DataContext здесь важен, я полагаю, вы установили DataContext *** до того, как *** добавили какой-то объект в «ListDS», это нормально, если ваше изменение «ListDS» будет уведомлено с помощью INotifyPropertyChanged. –

ответ

0

Вы должны реализовать интерфейс INotifyPropertyChanged. Интерфейс уведомит представление, когда свойство изменится.

Но вы хотите, чтобы ваше мнение было уведомлено, если в коллекции есть какой-либо новый элемент, поэтому лучше использовать коллекцию, которая сделает это за вас. Используйте ObservableCollection<UserInfo>, чтобы разоблачить ваш ListDS.

public ObservableCollection<UserInfo> ListDS 
{ 
    get { return listDS; } 
    set 
    { 
     listDS = value; 
     // Call OnPropertyChanged whenever the property is updated 
     OnPropertyChanged("ListDS"); 
    } 
} 

// Create the OnPropertyChanged method to raise the event 
protected void OnPropertyChanged(string name) 
{ 
    PropertyChangedEventHandler handler = PropertyChanged; 
    if (handler != null) 
    { 
     handler(this, new PropertyChangedEventArgs(name)); 
    } 
} 
+0

Спасибо, я использую Список Могу ли я использовать ObservationCollection вместо List? –

+0

Да, оба интерфейса коллекции 'IList ', поэтому ваш код не должен страдать какой-либо несовместимостью. Преимущество 'ObservableCollection' заключается в том, что он также реализует' INotifyCollectionChanged'. В этом ответе вы найдете более подробную информацию по этой теме: http://stackoverflow.com/a/4197068/3330348 – PiotrWolkowski

-1

предполагается, что ваш вид-код модели является правильным вам только нужно изменить:

<ListBox Height="300" Width="200" ItemsSource="{Binding ListDS2}" Margin="0,10" >

к этому:

<ListBox Height="300" Width="200" ItemsSource="{Binding userFiles}" Margin="0,10" >

и он будет работать. обратите внимание на неправильное значение привязки!

+0

Я обновил свой код, пожалуйста, проверьте –

+0

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