来自View的MvvmCross手表属性

时间:2013-12-30 23:08:29

标签: android xamarin mvvmcross

我希望我的android视图触发一个方法,以便在ViewModel中某个属性发生更改时创建Toast消息。我发现的所有示例都在XML中绑定。这看起来简单得多,但我找不到任何例子。

1 个答案:

答案 0 :(得分:2)

您可以通过在视图中创建对viewmodel的弱订阅并在属性更改时显示toast来执行此操作: -

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Android.OS.Bundle savedInstanceState)
    {
        IMvxNotifyPropertyChanged viewModel = ViewModel as IMvxNotifyPropertyChanged;
        viewModel.WeakSubscribe(PropertyChanged);
        return base.OnCreateView(inflater, container, savedInstanceState);            
    }

    private void PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
    {
        if (e.PropertyName == "the property")
        {
            //Display toast
        }
    }

但是我很想让你的viewmodel控制这种行为(你是否要为每个实现编写上面的代码?)

只需通过nuget添加UserInteraction插件,然后执行以下操作:

private readonly IUserInteraction _userInteraction;

public FirstViewModel(IUserInteraction userInteraction)
{
    _userInteraction = userInteraction;
}

private string _hello = "Hello MvvmCross";
public string Hello
{ 
    get { return _hello; }
    set
    {
        _hello = value;
        RaisePropertyChanged(() => Hello);
        _userInteraction.Alert("Property Changed!");
    }
}

这不显示祝酒词,它会显示一个消息框,但希望它会给你足够的信息。

最后,您可以使用信使插件发送“Show Toast”消息。