UWP、C#、Caliburn。微气泡……如何气泡?
下面是我的简单测试项目,尝试Caliburn.Micro+UWP 有两个按钮UWP、C#、Caliburn。微气泡……如何气泡?,uwp,caliburn.micro,Uwp,Caliburn.micro,下面是我的简单测试项目,尝试Caliburn.Micro+UWP 有两个按钮 保存:它在HelloViewModel上执行操作。(成功了:) 气泡保存:我希望它对ParentViewModel执行操作,但不起作用…:( 你能告诉我你的想法吗?为什么 首先是代码。这项工作很好 public void Save() { Debug.WriteLine("Click Save"); } 第二个是代码。这不起作用…我想知道 public void BubbleS
- 保存:它在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意味着您应该能够在输出窗口中看到任何绑定错误。