如何在ViewModel中使用代码添加到页面布局?

时间:2018-08-14 06:39:30

标签: xamarin xamarin.forms

我的页面布局如下:

<StackLayout x:Name="detailsLayout" VerticalOptions="FillAndExpand">
</StackLayout>

创建ViewModel时,我传递了指向页面的指针。我想做的是这样:

公共类CardsViewModel:BaseViewModel     {

    private readonly Cards cardsPage;

    public CardsViewModel(Cards cardsPage)
    {
        this.cardsPage = cardsPage;
    }

    async public Task CardBtn()
    {
        cardsPage.detailsLayout.Children.Clear();

但是由于其保护级别,我无法访问detailsLayout。

有人可以告诉我如何获得此权限吗?

1 个答案:

答案 0 :(得分:1)

上面的示例是耦合和打破ViewModelView(Page)之间的分隔符的示例。如果您想从MVVM模式中受益-不要保留对UI层的引用,绝对不要尝试直接在ViewModel中操纵UI层。

您应该做什么取决于您的需求,但是我可以给您一些建议:

  1. 将逻辑封装在自己的UI控件中,公开您可以从ViewModel绑定到的委托,命令或属性以触发特定事件。
  2. 保持UI层,页面本身的逻辑,并使用MessagingCenterViewModel进行通信。

祝你好运。

P.S .:您可以在official Xamarin documentation中找到有关MessagingCenter的更多信息和示例。只是不要忘记退订,否则您会发现自己陷入困境。