UWP、C#、Caliburn。微气泡……如何气泡?

UWP、C#、Caliburn。微气泡……如何气泡?,uwp,caliburn.micro,Uwp,Caliburn.micro,下面是我的简单测试项目,尝试Caliburn.Micro+UWP 有两个按钮 保存:它在HelloViewModel上执行操作。(成功了:) 气泡保存:我希望它对ParentViewModel执行操作,但不起作用…:( 你能告诉我你的想法吗?为什么 首先是代码。这项工作很好 public void Save() { Debug.WriteLine("Click Save"); } 第二个是代码。这不起作用…我想知道 public void BubbleS

下面是我的简单测试项目,尝试Caliburn.Micro+UWP

有两个按钮

  • 保存:它在HelloViewModel上执行操作。(成功了:)
  • 气泡保存:我希望它对ParentViewModel执行操作,但不起作用…:(
你能告诉我你的想法吗?为什么

首先是代码。这项工作很好

public void Save()
    {
        Debug.WriteLine("Click Save");
    }
第二个是代码。这不起作用…我想知道

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…但不会被称为BubbleSave


感谢您的帮助。

基本上,您希望通知父级已按下
BubbleSave
。您的子类不知道有关父级的任何信息,因此无法调用它。这里的解决方案是创建接口或事件。我可以看到您使用依赖项注入

您的
HelloViewModel
需要了解它的父级。它需要知道
BubbleSave
存在,以便您可以创建接口:

public interface IBubbleSave {
    void BubbleSave();
}
并将其分配给
ParentViewModel

public class ParentViewModel: Conductor<object>, 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");
    }
}
公共类HelloViewModel:屏幕
{
公共事件处理程序BubbleSavePressedEvent;
公共作废保存()
{
Debug.WriteLine(“单击保存”);
}
public void BubbleSave()
{
BubbleSavePresseEvent?.Invoke();
}
}
公共类ParentViewModel:导体
{
HelloViewModel_HelloViewModel;
公共ParentViewModel(HelloViewModel HelloViewModel)
{
_helloViewModel=helloViewModel;
_helloViewModel.BubbleSavePresseEvent+=BubbleSave;
ActivateItem(_helloViewModel);
}
public void BubbleSave()
{
Debug.WriteLine(“单击BubbleSave”);
}
}

基本上,您希望通知父类已按下
BubbleSave
。您的子类不知道有关父类的任何信息,因此无法调用它。这里的解决方案是创建接口或事件。我可以看到您使用了依赖项注入

您的
HelloViewModel
需要了解它的父级。它需要知道
BubbleSave
存在,以便您可以创建接口:

public interface IBubbleSave {
    void BubbleSave();
}
并将其分配给
ParentViewModel

public class ParentViewModel: Conductor<object>, 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");
    }
}
公共类HelloViewModel:屏幕
{
公共事件处理程序BubbleSavePressedEvent;
公共作废保存()
{
Debug.WriteLine(“单击保存”);
}
public void BubbleSave()
{
BubbleSavePresseEvent?.Invoke();
}
}
公共类ParentViewModel:导体
{
HelloViewModel_HelloViewModel;
公共ParentViewModel(HelloViewModel HelloViewModel)
{
_helloViewModel=helloViewModel;
_helloViewModel.BubbleSavePresseEvent+=BubbleSave;
ActivateItem(_helloViewModel);
}
public void BubbleSave()
{
Debug.WriteLine(“单击BubbleSave”);
}
}

只在此处粘贴相关代码并描述不起作用的内容。我添加了一些有问题的主要代码。谢谢!您的
BubbleSave
属于不同的类,因此您希望它如何工作?HelloView的DataContext是HelloViewModel。Caliburn将无法解析BubbleSave的方法。因为您正在使用约定来指定在输出中看不到任何绑定错误的方法。我更喜欢使用ICommand绑定到按钮的Command属性,这意味着您应该能够在输出窗口中看到任何绑定错误。在此处仅粘贴相关代码,并描述不起作用的内容。我添加了一些有问题的主代码。谢谢!您的
BubbleSave
在另一个类中,您希望它如何工作?HelloView的DataContext是HelloViewModel。Caliburn将无法解析BubbleSave的方法。因为您使用约定绑定方法,所以在输出中不会看到任何绑定错误。我更喜欢绑定到按钮的Command属性,使用ICommand意味着您应该能够在输出窗口中看到任何绑定错误。