漫坊亭

社会の底辺プログラマ

(自分用翻訳) Caliburn Micro Part 6: Introduction to Screens and Conductors

原文へのリンク (google翻訳を使用しています)

Caliburn Micro Part 6: Introduction to Screens and Conductors

私たちの単純なCaliburnMicroチュートリアルシリーズの次の設置へようこそ。今回は画面とコンダクターとして知られている強力な概念を見てみましょう。あなたはこのトピックに関するドキュメントを参照している場合は、カバーするために、コンテンツのかなり多くがある表示されます。この記事では、私はちょうど実際にどのような画面やコンダクター説明し、その後、ステップバイステップで非常に単純な方法で画面とコンダクターを使用するアプリケーションを構築を通じてかかります。

So what are these things?

最も一般的には、画面には、ライフサイクルを通過するアプリケーションの一部です。これは、活性化または非活性化を閉じることができます。ドキュメントでよく使用されているこの良い例は、Visual Studioのコードエディタです。コードエディタは、ユーザーが編集するファイルを開いたときにユーザーがタブを閉じた場合は、ユーザー別のタブに切り替えて、それができるが「閉じた」場合には、それが「非活性化」されている「活性化」されています。外部ロジックは、現在アクティブな画面に基づいて、ツールバーを変更するなど、適用することができるように、画面の状態が変化したときにイベントが発生します。画面は、ビューモデルの特別なタイプであるように、これまでに聞こえるが、これは必ずしもそうではありません。これは、画面が複数のロールのような、いないビュー·モデルと考えられていることをお勧めします。その他の使用シナリオは、このチュートリアルシリーズの範囲外であるので、私は、ビューモデルとして画面を使用してに固執します。

コンダクターは、一つ以上のスクリーンのライフサイクル状態を管理します。これらは、活性化、非活性化とシナリオに異なる行わ基づいて行われます、それが管理画面を閉じるための責任があります。閉鎖動作の一部は、それが閉じたりすることができないかどうかを確認するために画面を照会することを含みます。画面は、例えば、保存されていないデータを保持している場合は、保存されていない作業が失われないように開閉動作を停止させることになります。

Screens and Conductors in Caliburn Micro

CaliburnMicroは画面やコンダクターに関連する多くのインターフェイスが含まれています。各インターフェイスは、カスタムを提供する」ことができ、この画面を閉じる」ロジックまたは特定の画面は、導体は、別の画面を起動させる前に非アクティブ化する必要があるかどうかを指定するよう、システム全体の非常に単純な部分のためのものです。独自のカスタム画面やコンダクターを作成する場合は、あなたがそうあなただけが気機能を実装する必要があります必要がありますどちらのインターフェース混在し、一致することができます。 CaliburnMicroは、画面や導体は、関連するすべてのインターフェイスを実装することを期待しません。それはちょうどあなたがそれを与えるものは何でも動作します。幸いなことに、CaliburnMicroは、これらのインタフェースを実装するいくつかの具体的なクラスが含まれています。これは、これらのクラスを拡張し、私はこのチュートリアルシリーズでやっているよ何であるあなたがする必要がある論理のビットを上書きすることは容易です。最初に私はカリバーンマイクロは異なるシナリオのために有用である提供3つの導体の簡単な説明を与えることをしたいと思います。

Conductorは - 一度に単一のスクリーンを管理します。それは新しい画面をアクティブにすると、以前の画面には、非アクティブに閉じられ、導体によって忘れられています。これは非常に単純なナビゲーション/表示シナリオのために使用されます。

Conductor.Collection.OneActive - この1つは、一度に多くの画面を管理し、多くのタブコントロールのように、一つの画面を一度にアクティブにすることができます。画面が起動されると、以前にアクティブ画面は、単にそれが閉じていないとコンダクターの管理下に置かれたまま、非アクティブ化されます。スクリーンは、明示的に除去するために閉じることができます。導体のこのタイプは、アクティブ画面が閉じている場合は、その画面のいずれかを活性化する責任があります。これは、あなたがする必要がある場合は、上書きすることができ、簡単なデフォルトのロジックを持っています。

Conductor.Collection.AllActive - 非常に前のコンダクターに似ていますが、可能にする複数の画面を一度にアクティブ状態にします。

すべてCaliburnMicro導体の実装の一つの一般的な側面は、彼らがScreenクラスを拡張することです。これは、コンダクターはまた、構成可能なビットでアプリケーションを構築するための非常に柔軟なモデルを作成し、他の導体によって管理することができることを意味します。

今、あなたは画面と導体と何CaliburnMicroが提供しているの基本的な理解を持っていること、のはストレート非常に簡単なデモでそれらを使用するに取得してみましょう。

Step 1: Getting started

私ははじめにチュートリアルから直接続行するには、この簡単なチュートリアルを設計しました。あなたはまだ行っていないのであれば、わずか数分かかりますそのチュートリアルのステップを実行します。今日のチュートリアルを終了すると、アプリケーションは、ウィンドウの上部にある3つのボタンが表示されます。ボタンをクリックすると、コンダクターが活性化し、ボタンの下の領域に単一の画面を表示します。 - CaliburnMicroで提供SimpleNavigationサンプルに似ています。

Step 2: The conductor

今コンダクターであることがAppViewModelを変更することができます。私たちは、一度に単一のスクリーンを管理されますので、我々は非常に基本的な導体を使用することができます。これはAppViewModelが今どのように見えるかです。

public class AppViewModel : Conductor<object>
{
}

その深いダウン、クラス階層内の注意、コンダクターはPropertyChangedBaseが延びています。これは、我々はAppViewModelが延び内容を変更しても、それが簡単にMVVMアプリケーションの重要な部分であるプロパティの変更通知を上げるために可能にすることができる理由です。

何かが心に留めておく:今、私たちがアプリケーションのルートにコンダクターを有しており、上述したように、CaliburnMicro導体はScreenクラスを拡張します。スクリーンは、それらを活性化するために導体を必要とするので、どのように我々のアプリケーションのルートが活性化されるのですか?答えはCaliburnMicroブートストラップとウィンドウマネージャクラスはルート画面を表示するためのサポートを持っているということです。CaliburnMicroアプリケーションを構築する際に、ルート画面が/コンダクターはブートストラップまたはウィンドウマネージャのいずれかによって管理されていることを確認してください。

Step 3: The screens

今度は、コンダクターが管理する我々のアプリケーションにいくつかの画面を追加してみましょう。このチュートリアルでは、画面はビュー·モデルであるので、その名前は"ViewModelに"で終わることを確認します。ダウンロード可能なプロジェクトでは、私がRedViewModel、GreenViewModelとBlueViewModelそれらを呼んでいるが表示されます。これらはすべて、Screenクラスを拡張します。このチュートリアルでは、これらのような空のクラスを残すことでしょうが、私はあなたがオーバーライドして、彼らの行動をカスタマイズして遊ぶことができますどのような方法を見てお勧めします。

正しくCaliburnMicro命名規則(RedView、GreenView、BlueView)を使用して、それらに名前を付けることを忘れないでください - 次に、これらの各画面に、ユーザーコントロールを追加します。各ビューでは、私は単純に次の例のように着色されたテキストブロックを表示しています:

<UserControl x:Class="CaliburnMicroApp_Navigation.RedView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">
  <Grid>
    <TextBlock Text="Red" FontSize="48" FontWeight="Bold" Foreground="#FF463D" VerticalAlignment="Center" HorizontalAlignment="Center" />
  </Grid>
</UserControl>

Step 4: Interactivity

今AppView.xamlを開き、このようなアプリケーションの最上部に沿っていくつかのボタンを追加します。

<DockPanel Width="300" Height="300" Background="LightBlue">
  <StackPanel Orientation="Horizontal" DockPanel.Dock="Top" HorizontalAlignment="Center">
    <Button x:Name="ShowRedScreen" Content="Red" Width="50" />
    <Button x:Name="ShowGreenScreen" Content="Green" Width="50" Margin="12,0,0,0" />
    <Button x:Name="ShowBlueScreen" Content="Blue" Width="50" Margin="12,0,0,0" />
  </StackPanel>
</DockPanel>

AppViewModel.cs(私たちのコンダクター)のボタンをクリックの応答は、適切な画面を活性化することになります。これはActivateItemメソッドを呼び出すことによって行われます。ここでは今(ボタンとしてメソッドに同じ名前を付けることで、CaliburnMicroが私たちのためにそれらをフックしていることを覚えておいてください)のようAppViewModel.csが見えるものです。

public class AppViewModel : Conductor<object>
{
  public void ShowRedScreen()
  {
    ActivateItem(new RedViewModel());
  }
 
  public void ShowGreenScreen()
  {
    ActivateItem(new GreenViewModel());
  }
 
  public void ShowBlueScreen()
  {
    ActivateItem(new BlueViewModel());
  }
}

Step 5: displaying the active screen

すべての最後に、我々は、現在アクティブな画面を表示する必要があります。これは、ボタンの下のコードのこの神秘的に見える部分を追加することによって行うことができます。

<ContentControl x:Name="ActiveItem" />

これはCaliburnMicroから別の巧妙な命名規則です。我々は以前のコントロールの名前を設定することにより、CaliburnMicroは自動的に同じ名前のビューモデルのプロパティにコントロールの主な内容/使用状況のプロパティをバインドすることを見てきました。この場合、「ActiveItemは「私たちのAppViewModelが延びる導体のプロパティです。しかし、このシナリオに関する特別なことはContentControlが適切なビュー、プロパティが実際に返すNOTビューモデルを表示してしまうことがあります。もう一度、我々はCaliburnMicroを使用して多くの時間を節約することができることを示します。

これでアプリケーションを実行し、それがことだ行う導体を表示するには、ボタンをクリックします。

f:id:jfactory:20150621221638p:plain

そして、それは私たちのCaliburnMicroチュートリアルシリーズの一部6は以上です。私は、これは画面やコンダクターを理解し、それらをアプリケーションで使用することに容易に導入されている願っています。これは簡単なデモであったが、画面や導体は、モーダルダイアログ、ナビゲーション、動的タブなどのライフサイクルのシナリオを管理するための強力なMVVMの方法です。たくさんの詳細情報については、ここで公式ドキュメントをチェックしてください。そこにこのトピックで読むことがたくさんあるが、それはよく書かれています。

ここからこのチュートリアルの完全なVisual Studioのソリューションをダウンロードしてください。

ハッピーコーディング:)