2012-03-06 28 views
17

Tôi là một lập trình viên WPF mới làm quen. Tôi đang cố gắng thêm một số cấu trúc vào mã của tôi: cả điều khiển người dùng và MVVM.Caliburn.Micro có chơi độc đáo với điều khiển người dùng không?

Nghiên cứu ở đây, tôi đã tìm thấy rằng people recommend Caliburn.Micro. Mặt khác, tôi đã tìm thấy một số khiếu nại hereelsewhere về Caliburn.Micro không chơi độc đáo với UserControls.

Vì vậy, câu hỏi của tôi là: Caliburn.Micro có chơi độc đáo với Điều khiển người dùng không?

Trả lời

36

Có, Caliburn.Micro phát độc đáo với các điều khiển của người dùng. Đó là một khuôn khổ có ý kiến, nhưng không phải là điểm buộc bạn phải đi theo con đường phát triển cụ thể. Khi câu trả lời cho các câu hỏi được liên kết đề xuất, bạn luôn có thể sử dụng đồng bộ WPF cũ nếu bạn có bất kỳ vấn đề cụ thể nào. Trên thực tế, tôi sẽ không để hai liên kết đó ngăn cản bạn, đầu tiên là mô tả cách liên kết các thuộc tính riêng biệt với một điều khiển người dùng đơn lẻ và giải pháp là hợp lệ. Một giải pháp tốt hơn có lẽ sẽ là sử dụng một ItemsControl với một tuỳ chỉnh DataTemplate, và sau đó tạo một tập hợp các DTO trên mô hình khung nhìn của mình có chứa tên và giá trị thuộc tính.

Liên kết thứ hai nêu rõ cách bạn tạo chế độ xem (UserControl) và tạo phiên bản chế độ xem trong XAML và bạn muốn liên kết chế độ xem với mô hình xem, sau đó được gọi là chế độ xem trước và bạn phải nói Caliburn.Micro nơi mô hình xem là liên kết với:

<UserControl ... 
    cal:Bind.Model="EasyPlayer.MediaControl.NowPlayingViewModel" /> 

vì vậy, đây khái niệm có thể được coi như một viewmodel/xem chứ không phải là một usercontrol với những đặc tính phụ thuộc, vv

trong thực tế, bạn sẽ tìm thấy khi bạn sử dụng Caliburn.Micro, bạn có thể sử dụng ít hơn và ít hơn UserControl s để thực hiện chế độ xem. Điều này là do rất dễ dàng để tạo ra các phần có thể sử dụng lại của giao diện người dùng bằng cách sử dụng các kiểu xem, các khung nhìn và cách tiếp cận đầu tiên của mô hình khung nhìn.

Khi bạn có một ContentControl trong chế độ xem có cùng tên với thuộc tính mô hình chế độ xem trên mô hình chế độ xem cha mẹ của bạn, thì Caliburn.Micro sẽ định vị chế độ xem của mô hình xem tương ứng, tiêm vào ContentControl và kết nối mô hình xem/xem.

Ví dụ:

public class MyParentViewModel : Screen 
{ 
    public MenuViewModel MenuViewModel { get; set; } 

    public DetailsViewModel DetailsViewModel { get; set; } 

    public MyParentViewModel() 
    { 
    this.MenuViewModel = new MenuViewModel(); 
    this.DetailsViewModel = new DetailsViewModel(); 
    } 
} 

<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width=".2*" /> 
    <ColumnDefinition Width=".8*" /> 
    </Grid.ColumnDefinitions> 

    <ContentControl Grid.Column="0" x:Name="MenuViewModel" /> 
    <ContentControl Grid.Column="1" x:Name="DetailsViewModel" /> 

</Grid> 
+0

bắt đầu với caliburn và chỉ cần đi qua bài rất hữu ích của bạn - ... có thể mở rộng một chút về hiện sử dụng usercontrols càng nhiều ... afaics một cái nhìn sẽ là một usercontrol phải không? thxvm –

+2

Có, với Caliburn.Micro bạn sẽ không sử dụng các điều khiển người dùng theo ý nghĩa của các điều khiển người dùng với các thuộc tính phụ thuộc, instantiating các điều khiển trực tiếp từ một điều khiển người dùng khác/cửa sổ, v.v. – devdigital

+0

ok ... nhưng bạn vẫn sẽ ở nhà, nói , một lưới trong một usercontrol (với tất cả các hành vi tùy chỉnh trong viewmodel/xaml) và nhận được tự động nạp vào một ContentControl thông qua Caliburn.Micro? (Chỉ muốn kiểm tra tôi không thiếu gì đó). Thx rất nhiều lần nữa. –

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