2012-02-15 29 views
10

Tôi muốn sử dụng MVVM trong một ứng dụng mà các trang khác nhau là TabItems.Bật TabItem qua Binding

Đối với điều này, tôi sử dụng bộ sưu tập quan sát các mô hình chế độ xem của tôi (Mục) và liên kết nó với tabcontrolols ItemSource.

Đối với mỗi mô hình xem, tôi đã tạo ra một mẫu dữ liệu cá nhân để làm cho cái nhìn đúng đắn như thế này:

<DataTemplate DataType="{x:Type baseVm:AViewModel}"> 
    <baseVw:AView /> 
</DataTemplate> 

Để hiển thị đúng tên trong tiêu đề của tab Tôi tạo ra một mẫu dữ liệu được áp dụng cho mỗi người trong số yếu tố điều khiển tab của:

<DataTemplate x:Key="ViewModelTabTemplate"> 
    <DockPanel> 
    <ContentPresenter Content="{Binding Path=Name}"/> 
    </DockPanel> 
</DataTemplate> 

việc kiểm soát tab trông như thế này:

<TabControl x:Name="myTabControl" 
      ItemsSource="{Binding Items}" 
      ItemTemplate="{DynamicResource ViewModelTabTemplate}"> 
</TabControl> 

Điều tôi muốn làm bây giờ là bật/tắt các tab từ bên trong mô hình khung nhìn có chứa bộ sưu tập. Lớp cơ sở của khung nhìn có chứa một thuộc tính phụ thuộc IsEnabled và tôi muốn kết buộc điều này với các khung nhìn. Nếu tôi làm điều này trực tiếp trong giao diện như thế này:

IsEnabled="{Binding IsEnabled, FallbackValue=true}" 

nội dung các trang tab của bị vô hiệu hóa khi tôi xoay sở hữu IsEnabled false. Nhưng những gì tôi thực sự muốn là cũng vô hiệu hóa tab tabpage và không chỉ nội dung.

Cảm ơn bạn đã trợ giúp!

Trả lời

21

Có lẽ bạn có thể thử một cái gì đó như thế này -

<TabControl> 
    <TabControl.ItemContainerStyle> 
     <Style TargetType="{x:Type TabItem}"> 
      <Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>   
     </Style> 
    </TabControl.ItemContainerStyle> 
</TabControl> 
+0

+1 Thats cách để làm điều đó :) – dowhilefor

+0

Cảm ơn bạn rất nhiều! Đó chính xác là những gì tôi đang tìm kiếm. – tabina

+0

Vui vì tôi có thể giúp! :) – Dror

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