2017-09-04 1 views
0

J'essaie de lier une UserList de classe IEnumerable à un ListBox en XAML, mais je ne parviens pas à résoudre le nom de l'objet. Mon code XAML est comme suit:Liaison WPF IEnumerable à ListBox avec un DataTemplate

  <ListBox DockPanel.Dock="Left" x:Name="UserListBox" Width="400" 
        ItemsSource="{Binding Source={StaticResource userList}}" 
        ItemTemplate="{StaticResource UserListTemplate}"> 

      </ListBox> 

J'ai userList instancié dans MainWindow.xaml.cs aussi bien, mais je suppose que je ne fais pas quelque chose de bien. L'intention est d'avoir ListBox lu à partir de UserList et créer une liste d'utilisateurs à partir de ce IEnumerable. Comment puis-je réparer ça?

public MainWindow() 
    { 
     InitializeComponent(); 
     DataConnection.CreateAndOpenDB(); 
     src.UserList userList = new src.UserList(); 


    } 

Répondre

1

Une variable locale ne peut pas être résolue par l'extension StaticResource.

Créez une propriété UserList comme indiqué ci-dessous et définissez le DataContext de la fenêtre sur this. Si vous souhaitez pouvoir ajouter ou supprimer des éléments après avoir défini le DataContext, la classe UserList doit implémenter l'interface INotifyCollectionChanged. Il peut le faire en dérivant de ObservableCollection.

public src.UserList UserList { get; } = new src.UserList(); 

public MainWindow() 
{ 
    InitializeComponent(); 
    DataConnection.CreateAndOpenDB(); 
    // add elements to UserList here 

    DataContext = this; 
} 

écrire ensuite la liaison en XAML comme ceci:

ItemsSource="{Binding UserList}" 

Voir Data Binding Overview pour une introduction.