2010-02-15 1 views
10

Tôi muốn thử thiết kế MVC cho ứng dụng nhỏ của mình.Làm cách nào để kiểm soát người dùng mở rộng lớp mở rộng UserControl?

Tôi có chế độ xem lớp Csharp bình thường mở rộng UserControl. Đó là một tệp .cs duy nhất.

Tôi có nhiều lớp mà tôi muốn mở rộng ViewBase. Đây là những UserControls thực tế để chúng có một mã phía sau tệp .cs và tệp .xaml.

Tuy nhiên, CSharp nói với tôi rằng đối với các lớp này, lớp cơ sở của chúng "khác với lớp được khai báo ở các phần khác".

Tôi có muốn làm gì không? Tôi đang làm gì sai?

Lưu ý rằng tôi đã không sửa đổi các tệp XAML của mình, vì vậy chúng vẫn sử dụng thẻ.

Đây là mã có liên quan:

// This gives the error in question and ViewBase is underlined 
// "Base class of LoginView differs from declared in other parts" 
public partial class LoginView : ViewBase { 
    public LoginView(Shell shell, ControllerBase controller) : base(shell, controller) { 
     InitializeComponent(); 
    } 
} 

// This one is a single .cs file 
public abstract class ViewBase : UserControl { 
    public Shell Shell { get; set; } 
    public ControllerBase Controller { get; set; } 

    protected ViewBase(Shell shell, ControllerBase controller) 
    { 
     Shell = shell; 
     Controller = controller; 
    } 
} 

Trả lời

21

Lưu ý rằng tôi không sửa đổi các file XAML tôi, vì vậy họ vẫn sử dụng thẻ

Đó là vấn đề của bạn. Bạn sẽ cần phải thay đổi:

<UserControl ...> 
    ... 
</UserControl> 

để

<local:ViewBase xmlns:local="clr-namespace:..." 
    ... 
</local:ViewBase> 

Vấn đề là bạn đang nói với trình biên dịch bạn đang kế thừa ViewBase ở một nơi (các cs tập tin) và UserControl trong một tệp khác (tệp .xaml).

+0

Cảm ơn bạn rất nhiều! –

+0

Điều này cần một chút công phu –