这是我尝试Caliburn.Micro + UWP的简单测试项目。
有2个按钮。
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 :(得分:2)
基本上你想要通知父母按下了BubbleSave
。您的孩子班级对您的父母一无所知,因此无法打电话给您。这里的解决方案是创建接口或事件。我可以看到你使用依赖注入。
你的HelloViewModel
需要了解一下它的父母。它需要知道BubbleSave
存在,因此您可以创建interface:
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();
}
}
您还必须在IBubbleSave
App.xaml.cs
的相关性
第二种方法是使用事件。
您的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");
}
}