2017-08-17 10 views
0

ここで私はCaliburn.Micro + UWPを試してみる簡単なテストプロジェクトです。UWP、C#、Caliburn.Micro Bubbling ....バブルの方法は?

enter image description here

2ボタンがあります。

  • 保存:HelloViewModelで処理を行います。 (それは働いていた:)
  • バブル割引:?私はそれを動作さParentViewModel上でアクションを作るが、ない期待... :(

あなたは私にあなたのアイデアを与えることができるのはなぜ???

Here is project file on Github.

まずHelloViewModeコード。この作品の罰金である。

public void Save() 
    { 
     Debug.WriteLine("Click Save"); 
    } 

第二はParentViewModeコードです。これは動作しません...私は疑問に思います...

public void BubbleSave() 
    { 
     Debug.WriteLine("Click BubbleSave"); 
    } 

とHelloView XAMLコードはこちらです。

 <Button x:Name="Save" Content="SaveButton" Margin="30"/> 
     <Button x:Name="BubbleSave" Content="Bubble SaveButton" Margin="30"/> 

私はBubbleSave ...と呼ばれることが予想されますが、呼び出されません。

ご協力いただきありがとうございます。

+0

はここだけで、関連するコードを貼り付け作業をdoesntのかを説明します。 – FCin

+0

質問に主なコードを追加しました。ありがとうございました ! –

+0

あなたの 'BubbleSave'は別のクラスにありますので、どのように動作すると思いますか? – FCin

答えて

2

基本的には、BubbleSaveが押されたことを親に通知します。あなたの子クラスはあなたの親について何も知らないので、それを呼び出すことはできません。ここでの解決方法は、インターフェースまたはイベントを作成することです。あなたは依存性注入を使用しているのがわかります。

HelloViewModelは、その親について少し知っておく必要があります。

public interface IBubbleSave { 
    void BubbleSave(); 
} 

をしてParentViewModelに割り当て:

public class ParentViewModel: Conductor<object>, IBubbleSave 

子供がメソッドを呼び出すことができるように、このインタフェースを必要とすべきであるあなたがインターフェイスを作成することができますので、それは、BubbleSaveが存在することを知っている必要があります。

public class HelloViewModel : Screen 
{ 
    private readonly IBubbleSave _bubbleSave; 
    public HelloViewModel(IBubbleSave bubbleSave) { 
     _bubbleSave = bubbleSave; 
    } 
    public void Save() 
    { 
     Debug.WriteLine("Click Save"); 
    } 
    public void BubbleSave() 
    { 
     _bubbleSave.BubbleSave(); 
    } 
} 

また、これを行うための第二の方法は、イベントを使用することで、あなたのApp.xaml.cs


IBubbleSaveの依存を登録する必要があります。

あなたHelloViewModelは、親が加入することにイベントを公開することができます。

public class HelloViewModel : Screen 
{ 
    public event EventHandler BubbleSavePressedEvent; 
    public void Save() 
    { 
     Debug.WriteLine("Click Save"); 
    } 

    public void BubbleSave() 
    { 
     BubbleSavePressedEvent?.Invoke(); 
    } 
} 

public class ParentViewModel : Conductor<object> 
{ 
    HelloViewModel _helloViewModel; 

    public ParentViewModel(HelloViewModel helloViewModel) 
    { 
     _helloViewModel = helloViewModel; 
     _helloViewModel.BubbleSavePressedEvent += BubbleSave; 

     ActivateItem(_helloViewModel); 
    } 

    public void BubbleSave() 
    { 
     Debug.WriteLine("Click BubbleSave"); 
    } 
} 
関連する問題