2011-07-12 17 views
6

Tôi có một vấn đề đơn giản ràng buộc một thực thể để datagrid trong wpf.wpf databrid databind với các đối tượng lồng nhau (như chi tiết chính)

Tôi có một thực thể Được gọi là "Người dùng" .... và mỗi "Người dùng" có một "Nhóm làm việc" .. mối quan hệ giữa hai người là một.

hiện tại trong EF mỗi thực thể Người dùng có một thực thể nhóm làm việc bên trong.

khi tôi muốn để ràng buộc người sử dụng Bộ sưu tập để DataGrid tôi không có đầu mối nóng để nói rằng bạn cần phải đặt forexample workgroup.Title bên trong một cột DataGrid

Tôi đang cố gắng để ràng buộc theo cách này:

XAML:

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Users}" HorizontalAlignment="Stretch" Margin="5" Name="dgUserList" VerticalAlignment="Stretch" SelectionChanged="dgUserList_SelectionChanged"> 
       <DataGrid.Columns> 
        <DataGridTextColumn Binding="{Binding FirstName}" Header="FirstName" /> 
        <DataGridTextColumn Binding="{Binding LastName}" Header="LastName" /> 
        <DataGridTextColumn Binding="{Binding Username}" Header="UserName" /> 
        <DataGridTextColumn Binding="{Binding WorkGroup}" Header="Workgroup" /> 
       </DataGrid.Columns> 
      </DataGrid> 

Mã Đằng sau: tạo một tài sản như thế này:

public List<User> Users 
    { 
     get { return dal.GetUsers(); } 
    } 

và thực hiện các ràng buộc:

private void BindGrid() 
    { 
     dgUserList.ItemsSource = Users; 
    } 

tập tin công việc này với các tính chất trực tiếp của người dùng Entity nhưng nó đặt loại thực thể Workgroup bên trong cột DataGrid và lý do là rõ ràng. Tôi muốn đặt Tiêu đề của nhóm làm việc bên trong

làm cách nào tôi có thể đạt được điều này?

bất kỳ trợ giúp sẽ được đánh giá cao

Trả lời

8
tính

WPF Bindings hỗ trợ lồng nhau như vậy để có được với bất kỳ phụ thuộc vào thuộc tính của một đối tượng ràng buộc chỉ sử dụng bình thường "" cú pháp:

<DataGridTextColumn Binding="{Binding WorkGroup.Title}" Header="Workgroup" /> 

Bạn cũng không cần đặt ItemsSource hai lần. Nếu bạn có DataContext của DataGrid được thiết lập như Window (hoặc UserControl, vv) có mã phía sau khai báo thuộc tính Users thì ràng buộc ItemsSource trong XAML là đủ và bạn có thể loại bỏ phương thức BindGrid. Nếu bạn chưa thiết lập DataContext, XAML ItemsSource Binding không làm bất cứ điều gì (bạn có thể thấy thông báo lỗi trong Debug Output) để có thể loại bỏ điều đó và chỉ để phương thức code-behind xử lý nó.

Bạn cũng nên cân nhắc sử dụng ObservableCollection để nhận thông báo tự động và cập nhật giao diện người dùng khi các mục được thêm hoặc xóa. Vì bạn đã sử dụng EF, bạn cũng có thể sử dụng EntityCollection cho User, bao gồm thông báo INotifyCollectionChanged tự động tương tự.

+0

cảm ơn John bạn tốt bụng – Pouyan