2010-10-06 43 views
5

Trong sản phẩm của chúng tôi, chúng tôi sử dụng phương pháp tiếp cận mô hình MVVM đầu tiên và nó hoạt động độc đáo nhưng với một báo trước. Khi xem trở nên phức tạp, cần có thời gian để tạo nó từ mẫu dữ liệu. Nếu chế độ xem được hiển thị và ẩn thường xuyên, chế độ xem sẽ trở nên hơi khó chịu. Nếu sử dụng khung nhìn đầu tiên, sẽ đủ dễ dàng để lưu vào bộ đệm chế độ xem nếu cần - nhưng khi sử dụng DataTemplate và mô hình đầu tiên, chúng tôi không có nhiều quyền kiểm soát chế độ xem. Bất kỳ ai đã giải quyết vấn đề này mà không cần chuyển sang phương thức xem đầu tiên?Có thể cache chế độ xem khi sử dụng phương pháp tiếp cận mô hình đầu tiên không?

Trả lời

3

với phương pháp tiếp cận viewmodel đầu tiên tôi nghĩ bạn không có cơ hội để "cache" chế độ xem. vì vậy bạn có thể xem xét để sử dụng xem đầu tiên và một bộ định vị viewmodel cho các luồng công việc datatemplates nặng. here là giải pháp khi sử dụng bảng kê với danh sách.

nhưng có thể có giải pháp nào có ghi đè cơ chế datatemplate wpf?

chỉnh sửa: điều gì xảy ra nếu bạn chỉ tạo "markerview" cho chế độ xem của mình, do đó, wpf datatemplate có thể tìm thấy nó. và sau đó trong chế độ xem điểm đánh dấu này, bạn tạo/bù nước lại chế độ xem thực? một cái gì đó giống như một định vị dịch vụ xem?

+0

Neat ý tưởng về "markerview", tôi sẽ xem nếu nó hoạt động ... –

+0

cho tôi biết nếu nó hoạt động;) – blindmeis

5

Hoạt động tốt nếu sử dụng ý tưởng @blindmeis.

Các công thức chung:

Tạo một ContentControl hoặc UserControl tên ViewCache:

public partial class ViewCache 
{ 
    public ViewCache() 
    { 
     InitializeComponent(); 
     Unloaded += ViewCache_Unloaded; 
    } 

    void ViewCache_Unloaded(object sender, RoutedEventArgs e) 
    { 
     Content = null; 
    } 

    private Type _contentType; 
    public Type ContentType 
    { 
     get { return _contentType; } 
     set 
     { 
      _contentType = value; 
      Content = ViewFactory.View(value); // use you favorite factory 
     } 
    } 
} 

Trong DataTemplate, sử dụng ViewCache, vượt qua các loại quan điểm thực sự bạn muốn sử dụng:

<Window.Resources> 
    <DataTemplate DataType="{x:Type TestViewCache:Foo}"> 
     <TestViewCache:ViewCache ContentType="{x:Type TestViewCache:View }"/> 
    </DataTemplate> 
</Window.Resources> 
<StackPanel> 
    <ContentPresenter Height="200" Width="300" 
     Content="{Binding ViewModel}"/> 
    <Button Content="Set VM" Click="SetVMClick"/> 
    <Button Content="UnSet VM" Click="UnSetVMClick"/>   
</StackPanel> 
+0

Cảm ơn nhưng sẽ tốt hơn để viết var control = xem dưới dạng Kiểm soát; control.DataContext = DataContext; Nội dung = lượt xem; –

+0

Xin chào Sergey, tôi đang tìm một giải pháp cho bộ nhớ cache xem và tìm thấy việc triển khai của bạn. Tôi không hoàn toàn hiểu làm thế nào tôi sẽ truy cập vào mô hình xem từ viewmodel cha mẹ sau đó. Tôi có phải truy cập vào 'ViewCache' không? Và thay đổi quan điểm được thực hiện như thế nào trong mô hình khung nhìn chính? – derape

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