2013-05-22 31 views
7

Tôi có một cửa sổ đơn giản:Làm thế nào tôi có thể ràng buộc một ItemsControl.ItemsSource với một tài sản trong 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> 

Và mã liên quan đến đằng sau:

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

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

    // Other code ... 
} 

Nếu tôi viết sau đây ràng buộc trong constructor cửa sổ:

lvItems.ItemsSource = Activities; 

sau đó ListView của tôi là được cập nhật tự động khi tôi thêm hoặc xóa các phần tử từ Activities.

Làm cách nào để viết liên kết trong XAML?
tôi đã cố gắng này, nhưng nó không hoạt động:

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

Làm thế nào để làm cho công việc này trong XAML?

+0

Các bạn đã thử 'ItemsSource = {Binding hoạt động } '? – hattenn

Trả lời

12

gì @JesseJames nói là đúng nhưng chưa đủ.

Bạn phải đặt

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

như

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

Và các ràng buộc nên là:

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

Kính trọng,

+3

Công việc này nhưng để thiết lập DataContext tôi nghĩ rằng đó là cách tốt hơn giống như @Farhad Jabiyev viết. –

2

Đặt DataContext = this trong trình tạo cửa sổ.

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

Sau đó, bạn sẽ có thể để ràng buộc hoạt động như bạn muốn: <ListView x:Name="lvItems" ItemsSource="{Binding=Activities}" />

1

Đó là bởi vì bối cảnh dữ liệu quan điểm của bạn chưa được thiết lập. Bạn có thể có thể làm điều này trong các mã sau:

this.DataContext = this; 

Ngoài ra, bạn có thể thiết lập của DataContext Window cho chính nó - DataContext="{Binding RelativeSource={RelativeSource Self}}"

Bạn đang tốt hơn off mặc dù điều tra MVVM design pattern, và using an MVVM framework.

11

Bạn phải thiết lập DataContext để này như những người khác đã trả lời, nhưng bạn có thể đặt DataContext qua xaml thêm:

<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> 
Các vấn đề liên quan