2017-08-17 168 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

只粘貼相關的代碼,並說明不工作。 – FCin

+0

我在問題中增加了一些主要代碼。謝謝 ! –

+0

你的'BubbleSave'在不同的課程中,你如何期待它的工作? – FCin

回答

2

基本上你想通知家長BubbleSave被按下。您的孩子班級不知道您父母的任何信息,因此無法調用它。這裏的解決方案是創建一個接口或一個事件。我可以看到你使用依賴注入。

你的HelloViewModel需要知道一點關於它的父母。它需要知道BubbleSave存在,所以你可以創建界面:

public interface IBubbleSave { 
    void BubbleSave(); 
} 

並將其分配給ParentViewModel

public class ParentViewModel: Conductor<object>, IBubbleSave 

孩子應該要求該接口能夠調用的方法。

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"); 
    } 
}