2009-09-05 44 views
40

Làm cách nào để liên kết thuộc tính mô hình chế độ xem với thuộc tính ListBox.SelectedItem?MVVM: Liên kết với ListBox.SelectedItem?

Tôi đã tạo bản trình diễn MVVM đơn giản để cố gắng tìm hiểu điều này. Mô hình chế độ xem của tôi có các thuộc tính sau:

private ObservableCollection<DisneyCharacter> p_DisneyCharacters; 
public ObservableCollection<DisneyCharacter> DisneyCharacters 
{ 
    get { return p_DisneyCharacters; } 

    set 
    { 
     p_DisneyCharacters = value; 
     base.FirePropertyChangedEvent("DisneyCharacters"); 
    } 
} 

private DisneyCharacter p_SelectedItem; 
public DisneyCharacter SelectedItem 
{ 
    get { return p_SelectedItem; } 

    set 
    { 
     p_SelectedItem = value; 
     base.FirePropertyChangedEvent("SelectedItem"); 
    } 
} 

Tôi muốn liên kết thuộc tính SelectedItem với mục được chọn trong hộp danh sách. Đây là XAML cho hộp danh sách:

<ListBox ItemTemplate="{StaticResource MasterTemplate}" 
     ItemsSource="{Binding Path=DisneyCharacters}" 
     SelectedItem="{Binding Path=Selectedtem, Mode=TwoWay}" 
     HorizontalAlignment="Stretch" /> 

Đây là vấn đề của tôi: Thuộc tính SelectedItem xem không được cập nhật khi tôi thay đổi lựa chọn trong hộp danh sách.

Tôi đã thử nghiệm nơi tôi tạm thời thay thế thuộc tính SelectedItem của mô hình chế độ xem bằng thuộc tính SelectedIndex và tôi ràng buộc thuộc tính ListBox.SelectedIndex. Tài sản đó được cập nhật tốt - nó chỉ là thuộc tính SelectedItem mà tôi không thể làm việc được.

Vì vậy, làm cách nào để khắc phục ràng buộc SelectedItem? Cảm ơn bạn đã giúp đỡ.

+4

Ví dụ về cách sử dụng hộp danh sách trong MVVM. Cảm ơn – MrPurpleStreak

Trả lời

45

Vâng, ở đó, lớn như cuộc sống. Trong XAML. Tôi ràng buộc với một thuộc tính mô hình khung nhìn "Selectedtem". Thật không may, tên thật là "SelectedItem". Vì vậy, mã này thực sự hoạt động - Tôi đã giải quyết vấn đề vào đầu chiều nay và sau đó dành phần còn lại của buổi chiều và tất cả các buổi tối cọ rửa web, trước khi tôi nhận thấy lỗi chính tả.

Vợ tôi nói với tôi lúc 3:00 chiều nay, "Bạn biết đấy, nó sẽ trở thành một thứ gì đó nhỏ bé." Và nó đã làm - một bức thư còn thiếu "Tôi". Vâng, ít nhất tôi có thể đi ngủ ngay bây giờ.

+50

Để giúp bạn tìm thấy những vấn đề này sớm hơn, nếu bạn gỡ lỗi ứng dụng của bạn, bạn sẽ thấy một lỗi ràng buộc WPF trong cửa sổ đầu ra của Visual Studio, chỉ ra rằng thuộc tính "Selectedtem" không tồn tại. Hy vọng rằng sẽ giúp bạn theo dõi loại lỗi này nhanh hơn trong tương lai. – Andy

+1

Tôi ước gì tôi biết về các lỗi liên kết trong cửa sổ đầu ra một năm trước khi tôi bắt đầu phát triển Silverlight. Chỉ khi bạn bắt đầu nghĩ rằng bạn là một nhà phát triển phong nha ... – BoxerBucks

+0

@BoxerBucks, tôi không nghĩ rằng bạn nhận được ** bất kỳ ** thông báo hoặc các bản ghi cho các ràng buộc thất bại trong Silverlight. – Sam

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