2008-11-22 33 views
8

Tôi đã gõ đầu của tôi chống lại điều này trong một thời gian. Tôi không thực sự chắc chắn tại sao nó không hoạt động. Tôi vẫn còn khá mới mẻ đối với toàn bộ hoạt động kinh doanh WPF này.Bộ sưu tập ràng buộc WPF vào ComboBox và chọn một mục

Dưới đây là XAML của tôi cho các combobox

<ComboBox 
    SelectedValuePath="Type.FullName" 
    SelectedItem="{Binding Path=Type}" 
    Name="cmoBox" /> 

Đây là những gì populates ComboBox (myAssembly là một lớp tôi tạo ra với một danh sách các loại có thể)

cmoBox.ItemsSource = myAssembly.PossibleTypes; 

Tôi đặt DataContext trong cha mẹ phần tử của ComboBox trong mã phía sau như sau:

groupBox.DataContext = listBox.SelectedItem; 

Tôi muốn liên kết g để chọn đúng "loại có thể" từ hộp kết hợp. Nó không chọn bất cứ thứ gì. Tôi đã thử SelectedValue và SelectedItem. Khi tôi thay đổi DisplayMemberPath của ComboBox thành một thuộc tính khác, nó đã thay đổi những gì được hiển thị vì vậy tôi biết nó không hoàn toàn bị hỏng.

Bất kỳ ý tưởng nào ???

Trả lời

11

Trong XAML, đặt ItemsSource="{Binding}" và (trong mã phía sau) đặt DataContext thành myAssembly.PossibleTypes.

+0

Đã làm việc tuyệt vời! Cảm ơn –

+0

:) Tôi đã không kiểm tra nó ... nhưng tôi đã nhận được vào WPF rất nhiều gần đây (do sử dụng nó tại nơi làm việc) ... Tôi figured này hoặc là 100% chính xác, hoặc cách tắt. –

12

Bạn cũng có thể đặt ràng buộc trong xaml thay vì ở phía sau mã (chúng tôi tránh mã phía sau trong các trang xaml của chúng tôi bất cứ khi nào có thể). Tôi giả định rằng myAssembly là một tài sản trên code-behind của bạn cho việc kiểm soát và là một thể hiện của lớp MyAssembly của bạn ...

<UserControl 
    x:Class="MyNamespace.MyControl" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    DataContext="{Binding}"> 

    <ComboBox 
    Width="200" 
    ItemsSource="{Binding Path=myAssembly.PossibleTypes}" 
    SelectedValuePath="Type.FullName" 
    SelectedItem="{Binding Path=Type}" 
    Name="cmoBox" /> 
</UserControl> 

Nó có thể chỉ là sở thích cá nhân, nhưng tôi nghĩ đó là thực hành tốt hơn để có các ràng buộc dữ liệu trong xaml vì nó làm cho nó dễ dàng hơn để xem những gì mỗi điều khiển được ràng buộc mà không cần phải cào qua đoạn mã phía sau. Ngoài ra, nếu bạn muốn tham chiếu đến ComboBox của bạn từ bên trong mã, bạn nên gán một thuộc tính x: Name cho nó trong xaml thay vì chỉ là Tên.

-5

Tôi đồng ý: các ràng buộc phải nằm trong XAML. Tôi đặt ... kiểm tra .. không có gì ở tất cả trong mã phía sau, bao giờ hết. Nguồn dữ liệu là tất cả "tài nguyên" có thể tái sử dụng được.

(tốt, OK, trình tạo mã phía sau gọi InitializeComponent()).

+1

Bạn chưa trả lời được câu hỏi này. Bạn đã thêm gì nhưng tùy chọn không liên quan của bạn không sử dụng mã phía sau. Hơn nữa, câu hỏi đã được trả lời đúng 18 tháng trước khi câu trả lời của bạn được đăng. Vì những lý do này, -1. – Sheridan

+0

@Sheridan: +1 để nhận xét lý do tại sao đưa ra một điểm tiêu cực. –

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