我有一个与API交互的命令。如果命令未返回所需结果,则会设置ViewModel的属性,名为Error。
我想在我的视图中将Error绑定到UIAlertController,并在发生错误时显示它。
这大致是我所拥有的(尽管可见转换器显然不是那样)。我应该补充一点,我知道应该使用PresentViewController来显示UIAlertController。
UIAlertController myAlert = UIAlertController.Create ("", Error.Text, UIAlertControllerStyle.Alert);
set.Bind(myAlert).For("Visibility").To((myViewModel vm) => vm.Error).WithConversion("Visibility");
答案 0 :(得分:1)
查看观察者设计模式。 我喜欢的方式很简单:
创建抽象MessageObserver,其中TMessage:MvxMessage类,例如:
public interface IMessageObserver
{
void Subscribe(IMvxMessenger messenger);
void Unsubscribe();
}
public abstract class MessageObserver<TMessage> : IMessageObserver where TMessage : MvxMessage
{
public void Subscribe(IMvxMessenger messenger) {
messenger.SubscribeOnMainThread<TMessage>(OnMessageDelivered);
}
public abstract void OnMessageDelivered(TMessage message);
}
创建MessageObserverController
public class MessageObserverController {
public void SubscribeObserver(IMessageObserver msgObserver) {
msgObserver.Subscribe(messenger);
}
.. unsubscribe, dispose and so on goes here
}
实现ShowAlertDialogMessageObserver类(继承自MessageObserver<ShowAlertDialogMessage>()
,显示UIAlertViewController与来自ShowAlertDialogMessage的数据(标题,内容等)。如果需要,将根UIViewController作为构造函数传递(无论如何,您将在viewcontrollers中注册MessageObservers - 所以这不是问题。)
在ViewControllers中使用MessageObserverController
(最好是创建基本视图控制器以简化操作)。
Voilà - 您可以获得可重用的UI逻辑,您可以通过在PCL ViewModel中发布消息来引发该逻辑(无需创建任何特定于平台的耦合!)。