2010-03-24 27 views
13

Tôi có một WPF ListBox mà tôi muốndatabinding một ListBox với SelectionMode = Nhiều

  • Enable nhiều lựa chọn trong ListBox, và
  • DataBind ListBox sang mô hình quan điểm của tôi.

Hai yêu cầu này có vẻ không tương thích. Mô hình chế độ xem của tôi có thuộc tính ObservableCollection<T> để liên kết với ListBox này; Tôi thiết lập một ràng buộc trong XAML từ tài sản để các tài sản ListBox.SelectedItems. Khi tôi biên soạn, tôi nhận được một lỗi nói rằng tài sản SelectedItems chỉ đọc và không thể được thiết lập từ XAML.

Tôi có ràng buộc với thuộc tính kiểm soát sai không? Có cách nào để ràng buộc một ListBox nhiều lựa chọn trong XAML đến một thuộc tính bộ sưu tập mô hình xem không? Cảm ơn bạn đã giúp đỡ.

Trả lời

6

Tôi đã kết thúc bằng cách sử dụng một chút mã-đằng sau trong trình xử lý sự kiện SelectionChanged để đặt thuộc tính mô hình chế độ xem. Đơn giản hơn tạo trình bao bọc đối tượng.

21

Những việc bạn có thể làm để giải quyết vấn đề này:

Tạo thuộc tính IsSelected trên các mục bạn đang hiển thị trong danh sách. Im giả định chúng được đại diện bởi một mô hình xem là tốt. Vì vậy, nó không phải là một bộ phim truyền hình để thêm một tài sản thêm. Nếu họ chỉ là đối tượng kinh doanh xem xét sử dụng một lớp bọc để không đau bọc chúng trong các mặt hàng mô hình xem (shameless plug - here là một hệ thống như vậy. Tôi sử dụng nó hàng ngày để bọc đối tượng kinh doanh của tôi)

Sử dụng kiểu thùng chứa mục để ràng buộc tài sản IsSelected của mục hộp danh sách với tài sản của các mục mà bạn đang hiển thị IsSelected, như vậy

<ListBox.ItemContainerStyle> 
     <!-- This Style binds a ListBoxItem to a the ViewModelItem. --> 
     <Style 
      TargetType="{x:Type ListBoxItem}"> 
      <Setter 
      Property="IsSelected" 
      Value="{Binding IsSelected, Mode=TwoWay}" /> 
     </Style> 
    </ListBox.ItemContainerStyle> 

(có thể cần một dựa trên thuộc tính trên phong cách, không chắc chắn)

Bây giờ bất cứ khi nào một danh sách mục hộp được chọn mô hình xem của bạn sẽ biết về nó và có thể cập nhật nội bộ của nó ollection theo yêu cầu.

+0

Tôi muốn bạn bao gồm mã chế độ xem biểu mẫu ... Không chắc chắn nên sử dụng kiểu dữ liệu nào trên thuộc tính. – barrypicker

+0

Thuộc tính IsSelected là một Boolean. –

+0

Đó là một giải pháp rất hay. Chỉ trong trường hợp, đối với một DataGrid, các XAML là: ... Guillaume

0

Tôi đã đăng kỹ thuật cho phép liên kết chỉ đọc với thuộc tính SelectedItems của DataFrid WPF chỉ bằng cách mở rộng DataGrid mà tôi cho rằng có thể dễ dàng được đồng chọn cho một ListBox. Bạn có thể xem bài đăng của tôi tại https://stackoverflow.com/a/16953833/62278

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