2013-05-22 8 views
7

Ho una semplice finestra:Come posso associare un oggetto ItemsControl.ItemsSource con una proprietà in 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> 

E il codice associato alle spalle:

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

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

    // Other code ... 
} 

Se scrivo quanto segue vincolante nella finestra costruttore:

lvItems.ItemsSource = Activities; 

poi il mio ListView è aggiornato automaticamente quando aggiungo o rimuovo elementi da Activities.

Come devo scrivere il binding in XAML?
Ho provato questo ma non funziona:

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

Come faccio a fare questo lavoro in XAML?

+0

Hai provato 'ItemsSource = {Attività Binding } '? – hattenn

risposta

12

Che @JesseJames dice è vero, ma non abbastanza.

bisogna mettere

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

come

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

E il legame dovrebbe essere:

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

saluti,

+3

Questo lavoro ma per impostare DataContext penso che sia il modo migliore è come scrivere @Farhad Jabiyev. –

2

Impostare DataContext = this nel costruttore Finestra.

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

Allora si sarà in grado di legare Attività come desiderate: <ListView x:Name="lvItems" ItemsSource="{Binding=Activities}" />

1

Questo perché il contesto dati della vista non è stata impostata. Si potrebbe o fare questo nel codice dietro:

this.DataContext = this; 

In alternativa, è possibile impostare il DataContext finestra a se stessa - DataContext="{Binding RelativeSource={RelativeSource Self}}"

Tu sei molto meglio se indagare il MVVM design pattern e using an MVVM framework.

11

È necessario impostare DataContext a questo come hanno risposto gli altri, ma è possibile impostare DataContext attraverso xaml anche:

<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> 
Problemi correlati