ShowAlertDialogMessage

ShowAlertDialogMessage

我有一个与API交互的命令。如果命令没有返回期望的结果,它将设置ViewModel的名为Error的属性。

我想将Error绑定到我的View中的UIAlertController上,并在发生错误时显示它。

这大致就是我所拥有的(尽管显然可见性转换器不是行之有效的)。我应该补充说,我知道PresentViewController应该用于显示UIAlertController。

        UIAlertController myAlert = UIAlertController.Create ("", Error.Text, UIAlertControllerStyle.Alert);
        set.Bind(myAlert).For("Visibility").To((myViewModel vm) => vm.Error).WithConversion("Visibility");

最佳答案

查看观察者设计模式。
我更喜欢实现这一目标的方法很简单:


创建从MvxMessage继承的类-假设ShowAlertDialogMessage具有标题,内容等属性。
创建抽象的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传递为构造函数(无论如何,您都将MessageObservers注册到视图控制器中,因此这不是问题)。
在ViewControllers中使用MessageObserverController(最好创建基本视图控制器以简化操作)。


Voilà-您将获得可重用的UI逻辑,您可以通过在PCL ViewModel中发布消息来引发UI逻辑(无需创建任何特定于平台的耦合!)。

09-06 02:11