2011-09-12 66 views
1

我已經實現了一個自定義控件,它將一些自定義類作爲項目並繪製它們。我想要實現一個分頁類來轉換頁面,但是可以自定義。到目前爲止,我定義了一個接口。C#中的類設計問題。尋呼機控制

public interface IPager 
{ 
    void NextPage(....); 
    int CurrentPage(.....); 
    void PreviousPage(...); 
    int PageCount(.....); 
} 

我的自定義控件採用IPager的實現。問題是實例不是從控制內創建的。這不是一個問題,但它會是如果我添加像currentPage實例參數,而不必計算複雜的東西..問題是,IPager實現是外部自定義控制對象,但應只在一個控制使用..

我不能除了擁有IPager的無狀態實現並在自定義控件中保持實例值之外,還有其他解決方案。 也擴展自定義控件類不是一個解決方案,因爲傳呼機可能動態變化...
任何其他解決方案?

回答

1

您的自定義控件應該只顯示一個頁面,而不用擔心保持尋呼機狀態。在MVC的說法中,這是一種觀點。你將分頁和維持狀態的邏輯與實際顯示頁面的過程分開。做這樣的事情:

interface IPageView { 
    IPager Pager {get;set;} 
    void ShowPage(PageData pageData); 
} 
// This is your custom control: 
class PageViewControl : Control, IPageView { 
    public IPager Pager { get; set; } 
    public void ShowPage(PageData pageData) { 
     // show the page data 
    } 
} 
// You've already defined the IPager interface: 
interface IPager { 
    ... 
} 
class Pager : IPager { 
    IPageView _view; 
    public void SetView(IPageView view) { _view = view; } 
    ... // state members, etc 
    public void NextPage() { 
     // update state, find page data 
     _view.ShowPage(pageData); 
    } 
} 

然後初始化它,像含窗體的構造函數的地方:

var pager = new Pager(...); 
pager.SetView(pageViewControl1); 
pageViewControl1.Pager = pager;