是否可以绑定隐藏/显示Mvvmcross中的UIAlertController?

时间:2015-08-12 09:37:01

标签: mvvmcross

我有一个与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");

1 个答案:

答案 0 :(得分:1)

查看观察者设计模式。 我喜欢的方式很简单:

  1. 创建继承自MvxMessage的类 - 让ShowAlertDialogMessage使用标题,内容等属性。
  2. 创建抽象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);
    }
    
  3. 创建MessageObserverController

  4. public class MessageObserverController { public void SubscribeObserver(IMessageObserver msgObserver) { msgObserver.Subscribe(messenger); } .. unsubscribe, dispose and so on goes here }

    1. 实现ShowAlertDialogMessageObserver类(继承自MessageObserver<ShowAlertDialogMessage>(),显示UIAlertViewController与来自ShowAlertDialogMessage的数据(标题,内容等)。如果需要,将根UIViewController作为构造函数传递(无论如何,您将在viewcontrollers中注册MessageObservers - 所以这不是问题。)

    2. 在ViewControllers中使用MessageObserverController(最好是创建基本视图控制器以简化操作)。

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