2013-05-22 2 views
7

Ich habe ein einfaches Fenster:Wie kann ich eine ItemsControl.ItemsSource mit einer Eigenschaft in XAML binden?

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

und den dazugehörigen Code hinter:

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

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

    // Other code ... 
} 

Wenn ich die folgende Bindung im Fenster Konstruktor schreiben:

lvItems.ItemsSource = Activities; 

dann meine Listview ist automatisch aktualisiert, wenn ich Elemente von Activities hinzufügen oder entfernen.

Wie soll ich die Bindung in XAML schreiben?
Ich habe versucht, diese aber es funktioniert nicht:

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

Wie mache ich diese Arbeit in XAML?

+0

Haben Sie versucht, 'Itemssource = {Binding Aktivitäten } '? – hattenn

Antwort

12

Was @JesseJames sagt, ist wahr, aber nicht genug.

Sie haben

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

als

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

zu setzen und sollte die Bindung sein:

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

Grüße,

+3

Diese Arbeit aber DataContext zu setzen Ich denke, es ist besser Weg ist wie @Farhad Jabiyev schreiben. –

2

Setzen Sie DataContext = this im Window-Konstruktor.

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

Dann werden Sie in der Lage sein, Aktivitäten zu binden, wie Sie wollen: <ListView x:Name="lvItems" ItemsSource="{Binding=Activities}" />

1

Das ist, weil der Datenkontext Ihrer Ansicht nicht festgelegt wurde. Man könnte dies entweder hinter im Code tun:

this.DataContext = this; 

Alternativ können Sie das Fenster des DataContext auf sich selbst gesetzt - DataContext="{Binding RelativeSource={RelativeSource Self}}"

Sie sind viel besser dran, obwohl die MVVM design pattern untersuchen und using an MVVM framework.

11

Sie müssen Datacontext diesen Satz wie andere beantwortet, aber Sie DataContext durch xaml auch festlegen können:

<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> 
Verwandte Themen