2013-05-22 3 views
7

J'ai une fenêtre simple:Comment lier un ItemsControl.ItemsSource avec une propriété dans XAML?

<Window x:Class="WinActivityManager" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
     <ListView x:Name="lvItems" /> 
    </Grid> 
</Window> 

Et le code associé derrière:

public partial class WinActivityManager : Window 
{ 
    private ObservableCollection<Activity> Activities { get; set; } 

    public WinActivityManager() 
    { 
     Activities = new ObservableCollection<Activity>(); 
     InitializeComponent(); 
    } 

    // Other code ... 
} 

Si j'écris la liaison suivante dans le constructeur de la fenêtre:

lvItems.ItemsSource = Activities; 

alors mon ListView est automatiquement mis à jour lorsque j'ajoute ou supprime des éléments de Activities.

Comment écrire la liaison dans XAML?
J'ai essayé, mais ça ne marche pas:

<ListView x:Name="lvItems" ItemsSource="{Binding=Activities}" /> 

Comment puis-je faire ce travail en XAML?

+0

Avez-vous essayé 'ItemsSource = {Activités de liaison } '? – hattenn

Répondre

12

Que dit @JesseJames est vrai, mais pas assez.

Vous devez mettre

private ObservableCollection<Activity> Activities { get; set; } 

comme

public ObservableCollection<Activity> Activities { get; set; } 

Et la liaison devrait être:

<ListView x:Name="lvItems" ItemsSource="{Binding Path=Activities}" /> 

Cordialement,

+3

Ce travail, mais pour définir DataContext je pense que c'est mieux comme @Farhad Jabiyev écrire. –

2

Définissez DataContext = this dans le constructeur Window.

public WinActivityManager() 
{ 
    Activities = new ObservableCollection<Activity>(); 
    DataContext = this; 
    InitializeComponent(); 
} 

Ensuite, vous serez en mesure de lier les activités que vous voulez: <ListView x:Name="lvItems" ItemsSource="{Binding=Activities}" />

1

C'est parce que le contexte de données de votre point de vue n'a pas été défini. Vous pouvez soit le faire dans le code sous-jacent:

this.DataContext = this; 

Alternativement, vous pouvez définir DataContext se de la fenêtre - DataContext="{Binding RelativeSource={RelativeSource Self}}"

Vous êtes beaucoup mieux que l'enquête MVVM design pattern et using an MVVM framework.

11

Vous devez définir DataContext à ce comme d'autres ont répondu, mais vous pouvez définir DataContext par xaml aussi:

<Window x:Class="WinActivityManager" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     DataContext="{Binding RelativeSource={RelativeSource Self}}"> 
    <Grid> 
     <ListView x:Name="lvItems" ItemsSource="{Binding=Activities}" /> 
    </Grid> 
</Window> 
Questions connexes