2013-05-22 2 views
7

У меня есть простое окно:Как связать объект ItemsControl.ItemsSource с свойством в 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> 

и связанный с ним код позади:

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

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

    // Other code ... 
} 

Если я пишу следующее связывание в окне конструктора:

lvItems.ItemsSource = Activities; 

тогда мой ListView является автоматически обновляется, когда я добавляю или удаляю элементы из Activities.

Как написать привязку в XAML?
Я попытался это, но он не работает:

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

Как сделать эту работу в XAML?

+0

Вы пробовали 'ItemsSource = {Binding деятельности } '? – hattenn

ответ

12

Что @JesseJames говорит, правда, но не достаточно.

Вы должны поставить

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

в

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

И связывание должно быть:

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

С уважением,

+3

Эта работа, но чтобы установить DataContext, я думаю, что это лучший способ, как пишет @Farhad Jabiev. –

2

DataContext = this в конструкторе окна.

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

Тогда вы сможете связать Деятельность, как вы хотите: <ListView x:Name="lvItems" ItemsSource="{Binding=Activities}" />

1

Это потому, что контекст данных вашей точки зрения не был установлен. Вы можете либо сделать это в коде позади:

this.DataContext = this; 

В качестве альтернативы, вы можете установить окна DataContext к себе - DataContext="{Binding RelativeSource={RelativeSource Self}}"

Ты гораздо лучше, хотя расследование MVVM design pattern и using an MVVM framework.

11

Вы должны установить DataContext в это как другие ответили, но вы можете установить DataContext через xaml также:

<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> 
Смежные вопросы