2013-05-22 18 views
7

Mam proste okno:Jak powiązać ItemsControl.ItemsSource z właściwością w 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> 

i związany kod tyle:

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

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

    // Other code ... 
} 

Jeśli piszę następujące wiązania w konstruktorze okna:

lvItems.ItemsSource = Activities; 

wtedy mój ListView jest automatycznie aktualizowane po dodaniu lub usunięciu elementów z Activities.

Jak napisać powiązanie w XAML?
próbowałem tego, ale to nie działa:

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

jaki sposób dokonać tej pracy w XAML?

+0

Czy próbowałeś 'ItemsSource = {Binding Inne } '? – hattenn

Odpowiedz

12

Co @JesseJames mówi jest prawdą, ale nie wystarczająco.

Musisz umieścić

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

jak

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

I wiązanie powinno być:

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

Pozdrowienia,

+3

Ta praca, ale aby ustawić DataContext Myślę, że jest lepszy sposób jest jak napisać @Farhad Jabiyev. –

2

Ustaww konstruktorze okna.

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

Wtedy będziesz w stanie związać Inne ile chcesz: <ListView x:Name="lvItems" ItemsSource="{Binding=Activities}" />

1

To dlatego, że kontekst danych widoku nie został ustawiony. Można to zrobić albo w kodzie za:

this.DataContext = this; 

Alternatywnie, można ustawić okna DataContext do siebie - DataContext="{Binding RelativeSource={RelativeSource Self}}"

Jesteś znacznie lepiej choć bada MVVM design pattern i using an MVVM framework.

11

Musisz ustawić DataContext do ten jak inni odpowiedział, ale można ustawić DataContext przez xaml również:

<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> 
Powiązane problemy