2011-09-12 8 views
1

私はいくつかのカスタムクラスをアイテムとして取り込み、それらを描画するカスタムコントロールを実装しました。ページをめくるためにページングクラスを実装したいが、それをカスタマイズすることができる。これまではインターフェイスを定義していました。C#でのクラスデザインの問題。コントロール用ポケットベル

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

私のカスタムコントロールは、IPagerの実装を取ります。問題は、インスタンスがコントロール内から作成されていないことです。これは問題ではありませんが、複雑なものを計算することなく、currentPageのようなインスタンスパラメータを追加すると問題になります。問題は、IPager実装がカスタムコントロールオブジェクトの外にありますが、1つのコントロールでのみ使用する必要があるということです。

私はできませんステートレスな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; 
関連する問題