如何从Xamarin表单中的CustomViewCell调用任何Navigation.PushPopupAsync?

时间:2018-02-23 07:54:07

标签: c# listview mvvm xamarin.forms

我有ListView且有CustomViewCellCustomViewCell只有几个按钮。

按钮:ShowProfile:此按钮弹出另一页。问题是我不知道如何Navigation.PushPopupAsync CustomViewCell。我还需要传递当前的CustomViewCell细节。

这是我在另一个页面中使用Navigation.PushPopupAsync的示例,该页面工作正常,但在CustomViewCell的情况下不起作用。

Navigation.PushPopupAsync(new UserProfilePage(new ExtendedProfile(_viewModel.Profile)));

但上面的代码在CustomViewCell中无效。

public partial class ProfileListItemViewCell : CustomViewCell
{
    public ProfileListItemViewCell()
    {
        InitializeComponent();
    }

    protected override void OnBindingContextChanged ()
    {
        base.OnBindingContextChanged ();
    }
    private void MenuItemProfile_Clicked(object sender, System.EventArgs e)
    {
        //not working
        Navigation.PushPopupAsync(new UserProfilePage(new ExtendedProfile(_viewModel.Profile)));
    }
}

2 个答案:

答案 0 :(得分:1)

您说ListView的{​​{1}}每个都包含按钮,每个ViewCell中的一个按钮应该是“查看个人资料”按钮。因此,假设每个ViewCell代表一个用户或其他什么,您可以在事件处理程序中访问该特定单元格的绑定上下文,就像这样(假设绑定到ViewCell的集合的类型为{{ 1}}):

ListView

答案 1 :(得分:0)

这看起来像是MessagingCenter

的工作
  

Xamarin.Forms MessagingCenter 启用视图模型和其他组件   沟通,而不必彼此了解任何事情   除了一个简单的消息合同。

在您的Page Constructor中

MessagingCenter.Subscribe<SomeObject> (this, "MyAwesomeShowWindowMessage", 
(someObject) =>
{
     Navigation.PushPopupAsync(new UserProfilePage(new ExtendedProfile(someObject)));
});

来自您的手机

 MessagingCenter.Send(SomeObject, "MyAwesomeShowWindowMessage");

当你退出听力页面时,不要忘记取消订阅

 MessagingCenter.Unsubscribe<SomeObject> (this, "MyAwesomeShowWindowMessage"));

其他一些例子

How to use Xamarin.Forms Messaging Center