2012-04-17 24 views
15

Tôi có một mô hình điểm được gọi làquan điểm khác nhau/dữ liệu mẫu dựa trên biến thành viên

ViewModelClass 

Mà chứa một boolean.

Tôi có một mô hình điểm, trong đó có

ObservableCollection<ViewModelClass> m_allProjects; 

Sau đó, tôi có điều này theo quan điểm của tôi:

<DataTemplate> 
    <views:ProjectInfoView x:Key="ProjectInfoDetailTemplate"/> 
</DataTemplate> 

<ItemsControl Grid.Row="1" Grid.Column="0" 
       ItemsSource="{Binding AllProjects}" 
       ItemTemplate="{StaticResource ProjectInfoDetailTemplate}" 
       Margin="10,28.977,10,10"> 
</ItemsControl > 

Bây giờ tôi muốn, dựa trên boolean trong AllProjects thu, sử dụng một datatemplate khác nhau. Cách tốt nhất để làm việc này là gì?

Tôi biết tôi có thể làm điều này với các Chế độ xem khác nhau và sử dụng một loại đối tượng ViewModel-base, nhưng tôi chỉ thích sử dụng 1 mô hình chế độ xem.

CHỈNH SỬA:

Tôi muốn làm điều này với trình kích hoạt dữ liệu. Ai đó có thể cung cấp cho tôi một số mã không?

Trả lời

58

Tôi thường sử dụng ContentControl để hiển thị dữ liệu và hoán đổi số ContentTemplate trong trình kích hoạt dựa trên thuộc tính thay đổi.

Dưới đây là một ví dụ tôi đã được đăng trên my blog rằng giao dịch hoán đổi một mẫu dựa trên một tài sản bị ràng buộc

<DataTemplate x:Key="PersonTemplate" DataType="{x:Type local:ConsumerViewModel}"> 
    <TextBlock Text="I'm a Person" /> 
</DataTemplate> 

<DataTemplate x:Key="BusinessTemplate" DataType="{x:Type local:ConsumerViewModel}"> 
    <TextBlock Text="I'm a Business" /> 
</DataTemplate> 

<DataTemplate DataType="{x:Type local:ConsumerViewModel}"> 
    <ContentControl Content="{Binding }"> 
     <ContentControl.Style> 
      <Style TargetType="{x:Type ContentControl}"> 
       <Setter Property="ContentTemplate" Value="{StaticResource PersonTemplate}" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ConsumerType}" Value="Business"> 
         <Setter Property="ContentTemplate" Value="{StaticResource BusinessTemplate}" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </ContentControl.Style> 
    </ContentControl> 
</DataTemplate> 

Một DataTemplateSelector cũng sẽ làm việc, nhưng chỉ khi tài sản đó xác định mẫu để hiển thị không thay đổi kể từ khi DataTemplateSelectors không phản hồi để thay đổi thông báo. Tôi thường tránh chúng nếu có thể vì tôi cũng thích logic lựa chọn xem của tôi theo quan điểm của tôi vì vậy tôi có thể thấy những gì đang diễn ra.

-1

nếu bạn muốn chuyển đổi mục xem mục kiểm soát của bạn trong trường hợp boolean ViewModelClass, thì bạn có thể chỉ cần sử dụng kiểu datatrigger trong người dùng ProjectInfoView của bạn.

+0

Bạn có thể hiển thị một số mã làm ví dụ không? –

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