2012-05-23 69 views
6

Làm cách nào để vô hiệu hóa mục lựa chọn duy nhất từ ​​GridView?Làm thế nào để vô hiệu hóa lựa chọn một mục duy nhất trong GridView

Tôi có GridView với ItemsSource của nó được liên kết với một số điện thoại có thể được liệt kê là <SampleDataItem>. Tôi muốn có thể lập trình không cho phép lựa chọn một số mục trong danh sách trong khi cho phép lựa chọn các mục khác.

Trả lời

7

Trong khi tôi chưa thực hiện việc này, bạn sẽ có thể sử dụng một ItemContainerStyleSelector trên GridView, phương thức này cung cấp cho bạn vùng chứa (GridViewItem) và mục bạn đang ràng buộc. Từ đó bạn có thể thiết lập thuộc tính IsEnabled trên GridViewItem thành false mà làm cho nó không thể chọn được.

Bạn cũng có thể cũng cần phải chọn kiểu tùy chỉnh vì kiểu GridViewItem mặc định sẽ tùy chỉnh cách một mục bị vô hiệu hóa sẽ trông như thế nào.

Cập nhật DataTemplateSelector Giải pháp

public class IssueGridTemplateSelector : DataTemplateSelector 
{ 
    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) 
    { 
     var selectorItem = container as SelectorItem; 

     if (item is Issue) 
      return IssueTemplate; 

     selectorItem.IsEnabled = false; 
     selectorItem.Style = RepositoryItemStyle; 

     return RepositoryTemplate; 
    } 

    public DataTemplate IssueTemplate 
    { 
     get; 
     set; 
    } 

    public DataTemplate RepositoryTemplate 
    { 
     get; 
     set; 
    } 

    public Style RepositoryItemStyle 
    { 
     get; 
     set; 
    } 
} 
+2

Dường như có lỗi trong đó. http://www.simonferquel.net/blog/archive/2012/03/14/windows-8--xaml-petit-bug-sur-itemscontrol-et-workaround.aspx – Michael

+0

Tôi đã thành công trong việc sửa đổi các vùng chứa phong cách sử dụng một DataTemplateSelector là tốt, bit của một hack, nhưng tôi đã sử dụng DTS để giết hai con chim với một viên đá. Tôi đã cập nhật câu trả lời của tôi với mã đó. –

+0

Điều gì sẽ xảy ra nếu tôi muốn giữ tất cả các mục có thể nhấp và trình bày lựa chọn trên một số mục? Có cách nào khác không? – oXeNoN

6

câu trả lời Nigel là tuyệt vời. Tôi chỉ cần thêm một số thuộc tính đính kèm vào WinRT XAML Toolkit mà nên làm cho nó đơn giản hơn để làm nếu bạn đang populating GridView của bạn bằng cách sử dụng ràng buộc thuộc tính ItemsSource.

Đối với tôi, cách thông thường để sửa đổi các thuộc tính GridViewItem sau đó đã sử dụng thuộc tính GridView.ItemContainerStyle. Sử dụng phương thức đó, bạn sẽ cần phải xác định thuộc tính IsEnabled bằng cách sử dụng một bộ định kiểu kiểu và kiểu dáng không hỗ trợ các ràng buộc trong WinRT. Sử dụng ItemContainerStyleSelector có thể là một cách, nhưng nó đòi hỏi phải định nghĩa một lớp tùy chỉnh.

tôi đã tạo ra một GridViewItemExtensions class với một tài sản IsEnabled rằng bạn có thể đặt trên bất kỳ kiểm soát trong GridView.ItemTemplate của bạn như thế này:

xmlns:xyzc="using:Xyzzer.WinRT.Controls" 
xyzc:GridViewItemExtensions.IsEnabled="{Binding IsEnabled}" 

property has a hành vi của việc tìm kiếm các GridViewItem trong tổ tiên của nó cây thị giác và giữ giá trị IsEnabled được đồng bộ với giá trị GridViewItemExtensions.IsEnabled được đặt trên con cháu của nó.

Sau đó, như Nigel đã nói - bạn vẫn cần trích xuất mẫu từ GridViewItem và sửa đổi nó để các mục bị vô hiệu hóa không bị mất vị trí.

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