2010-05-20 42 views
21

Hài hước, đôi khi những điều đơn giản khiến tôi bị mắc kẹt ở phía sau.WPF: Liên kết DataGrid với Danh sách <String>

tôi có thể ràng buộc một DataGrid để thỏa mãn một Bộ sưu tập của một số lớp tùy tiện, sử dụng một DataGridTextColumn như thế này:

// bound to List<Class> 
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/> 

Bây giờ tôi muốn để ràng buộc một DataGrid vào một Bộ sưu tập đơn giản của String. Vì vậy, vì không có tài sản "Name" hoặc một cái gì đó như thế để ràng buộc vào, làm thế nào để tôi viết những ràng buộc:

// bound to List<String> 
<DataGridTextColumn Header="Name" Binding="{Binding ???}"/> 

Chuỗi không có tài sản "giá trị" hoặc một cái gì đó như thế. Và nếu tôi chỉ viết {Binding}, tôi sẽ kết thúc bằng một cách ràng buộc một chiều, không thể viết các thay đổi về Bộ sưu tập.

Suy nghĩ về điều đó, tôi nghĩ rằng không thể liên kết với một bộ sưu tập, vì vậy tôi cần phải quấn chuỗi của tôi vào một lớp học?
Hoặc có cách nào không?

Trả lời

30

Bạn có thể làm cho nó chạy với Binding sau:

Binding="{Binding Path=.} 

Nhưng nó sẽ không giải quyết vấn đề của bạn, bởi vì chuỗi được tham khảo gõ đó là không thay đổi, nghĩa là bạn không thể thay đổi các tham chiếu chuỗi bạn đã bị ràng buộc để người dùng của bạn giao diện.

Vì vậy, suy nghĩ của bạn là chính xác, bạn sẽ cần phải quấn các chuỗi này trong các đối tượng, sử dụng thuộc tính đường dẫn của Ràng buộc và nạp các đối tượng này vào DataGrid của bạn.

public class StringWrapper 
{ 
    public string Value { get; set; } 
} 
+0

Nhưng tại sao trình bao bọc lại hoạt động? Chúng tôi vẫn còn ràng buộc với một chuỗi phải không? –

+0

Không .. Bạn đang ràng buộc với một đối tượng có chứa một chuỗi. Đó là sự khác biệt – Arcturus

+2

Tôi hiểu ngay bây giờ. Ràng buộc không thể thay đổi tham chiếu bị ràng buộc. Nó chỉ có thể thay đổi các thuộc tính. Nó có ý nghĩa bây giờ. Cảm ơn rất nhiều. –

Các vấn đề liên quan