2009-04-23 27 views
7

Tôi chỉ mới bắt đầu với mẫu MVVM trong WPF và tôi đã quyết định rằng cách tao nhã nhất để cấu trúc mã của tôi là tiêm mô hình khung nhìn vào hàm tạo của khung nhìn.MVVM - Chế độ xem thực sự có cần phải có hàm tạo mặc định không?

Điều này là tốt và tốt, nhưng ReSharper đưa ra cảnh báo trong XAML rằng chế độ xem của tôi không có hàm tạo mặc định. Tôi giả định rằng điều này là để tôi có thể xây dựng quan điểm của tôi trong XAML nếu cần thiết, nhưng đó chỉ là một phỏng đoán.

Tôi đang từ bỏ điều gì bằng cách yêu cầu chế độ xem của tôi thực hiện mô hình xem trong hàm tạo?

Edit: xem constructor của tôi trông như thế này:

public ExampleView(ExampleViewModel viewModel) 
{ 
    if (viewModel == null) throw new ArgumentNullException("viewModel"); 
    DataContext = viewModel; 
} 

Trả lời: tôi định cư trên những sản phẩm sau thiết lập, nơi không gian tên DesignTime chứa chế nhạo lên phiên bản của ViewModel để thử nghiệm và thiết kế thời gian ủng hộ.

ExampleView.xaml.cs

public ExampleView() 
{ 
    InitializeComponent(); 
} 

public ExampleView(IExampleViewModel viewModel) 
    : this() 
{ 
    DataContext = viewModel; 
} 

ExampleView.xaml

<UserControl 
    x:Class="Wpf.Examples.ExampleView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:DesignTime="clr-namespace:Wpf.Examples.DesignTime"> 

    <UserControl.DataContext> 
     <DesignTime:ExampleViewModel/> 
    </UserControl.DataContext> 

</UserControl> 

Trả lời

8

Khi bạn nhận ra chính xác, yêu cầu một hàm tạo không mặc định sẽ từ chối bạn sử dụng điều khiển đó từ XAML. Điều đó cũng có nghĩa là không hỗ trợ thiết kế nhiều hơn và các nhà thiết kế của bạn có thể sẽ ghét bạn. Cuối cùng, bạn phá vỡ tất cả các loại kịch bản ràng buộc dữ liệu tốt đẹp. Giống như sử dụng điều khiển dưới dạng ItemTemplate.

Là một biện pháp khắc phục cho hỗ trợ thiết kế bị mất, tôi khuyên bạn nên triển khai một hàm tạo mặc định tạo mô hình chế độ xem không cần bất kỳ cơ sở hạ tầng nào. Bằng cách đó, bạn có thể hỗ trợ chế độ thiết kế rất thanh lịch và đặt chế độ xem trong tệp XAML (ví dụ: để thử nghiệm) sẽ làm điều gì đó hợp lý.

Để khắc phục hỗ trợ ràng buộc dữ liệu bị thiếu, bạn nên cân nhắc xem có nên sử dụng mô hình xem thông qua số DataContext trong điều khiển WPF của mình hay không. Điều này là phổ biến trong WPF và --- như xa như tôi có thể nói --- cách dự định để vượt qua mô hình để xem trong WPF.

+0

Tôi đang thiết lập DataContext trong hàm tạo, có mô hình nào tốt hơn cho điều này không? –

+1

Sử dụng nhà máy? Đặt DataContext theo cách thủ công? Tạo một hàm tạo mặc định rỗng? –

0

Giả sử rằng bạn không cần sự hỗ trợ thiết kế sau đó tôi thấy không có lý do.

0

Để duy trì hỗ trợ thiết kế, bạn cần một hàm tạo mặc định. Khi bạn định nghĩa phương thức khởi tạo của riêng mình, bạn về cơ bản sẽ làm mất đi hàm tạo mặc định được tạo tự động. Chỉ cần tạo một constructor mặc định rõ ràng và bạn sẽ ổn.

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