WPF交互请求始终为null



嗨,我是WPF和XAML的新手,我正试图利用MVVMCross的MvxInteraction与用户交互,以获得一个";"是";或";否";基于此示例的确认。

我在让交互订阅事件处理程序时遇到了一个障碍,因为交互总是空的。我可以从引用中看到,交互变量基于绑定相互查看,所以我不确定发生了什么。我四处查看了一下,发现了这一点,这表明我稍后可以将绑定带到代码后面的UserControl视图中,所以我使用了一个调度器,但这也不起作用。

查看模型

public class StudentDetailsViewModel : MvxViewModel
{
private InteractionRequest<YesNoQuestion> _interaction = new InteractionRequest<YesNoQuestion>();
public IInteractionRequest Interaction => _interaction;
}

VIEW.XAML.CS

public partial class StudentDetailsView : MvxWpfView
{
private InteractionRequest<YesNoQuestion> _interaction;
public StudentDetailsView()
{
InitializeComponent();
Dispatcher.BeginInvoke(new Action(() => BindInteractions()), DispatcherPriority.ContextIdle, null);
}
public InteractionRequest<YesNoQuestion> Interaction
{
get => _interaction;
set
{
if(_interaction != null)
{
_interaction.Requested -= OnInteractionRequested;
}
_interaction = value;
_interaction.Requested += OnInteractionRequested; //***RUN TIME NULL EXCEPTION***
}
}
private void OnInteractionRequested(object sender, InteractionRequestedEventArgs eventArgs)
{
var yesNoQuestion = eventArgs.Callback;
}
private void BindInteractions()
{
var set = this.CreateBindingSet<StudentDetailsView, StudentDetailsViewModel>();
set.Bind(this).For(view => view.Interaction).To(viewModel => viewModel.Interaction).OneWay();
set.Apply();
}
}

交互类

public class YesNoQuestion
{
public bool? Confirmation { get; set; }
public string Question { get; set; }
public YesNoQuestion(string message)
{
Question = message;
}
}

我的第二个问题是,我对他们用";ShowDialog";以及";对话框状态";这里是他们的例子:

private async void OnInteractionRequested(object sender, MvxValueEventArgs<YesNoQuestion> eventArgs)
{
var yesNoQuestion = eventArgs.Value;
// show dialog
var status = await ShowDialog(yesNoQuestion.Question);
yesNoQuestion.YesNoCallback(status == DialogStatus.Yes);
}

他们只是简单地调用另一个用户控件视图来通过ShowDialog方法显示自己吗?

_interaction.Requested += OnInteractionRequested; //***RUN TIME NULL EXCEPTION***

不知怎的,这在第一次启动时总是null,然后它会在稍后分配正确的交互,所以添加一个null检查来解决这个问题。也许我们需要与MVVMCross本身确认。

其次,您可以处理您想在交互请求中显示的任何内容,例如,显示具有yes-no按钮类型的MessageBox,或者弹出另一个视图来显示自定义消息框类型。因为这是在WPF层上运行的。

最新更新