【问题标题】:Xamarin Forms bind view with viewmodel and viewmodel with serviceXamarin Forms 将视图与视图模型和视图模型与服务绑定
【发布时间】:2020-06-20 13:50:56
【问题描述】:

我有一个问题。现在我有一个基于 mvvm 的 xamarin 表单应用程序。我想要实现的是:将视图与视图模型中的属性绑定,并使用该属性来引用服务类中的属性。更改服务属性时,应更新从不同视图模型绑定到服务属性的所有视图。我怎样才能做到这一点?

下面的代码来自一个视图模型,还有更多的视图模型具有引用服务属性的属性。

    public string Signature
    {
        get => _activityStateService.Details.Signature.Autograph;
        set
        {
            _activityStateService.Details.Signature.Autograph = value;
            OnPropertyChanged(nameof(Signature));
        }
    }

当以下对象的属性之一发生更改时,我想通知正在引用此对象的 viewmodel(s) 属性,以便可以更新视图。

public class ActivityStateService : IActivityStateService
{
    public DriverActivity Details { get; set; }
}

【问题讨论】:

  • @M Yil 如果你想在Xamarin.forms中使用mvvm绑定,我建议你可以看看下面的文章:Xamarin.Forms Simple MVVM Binding Example,你说viewmodel中有属性,这些属性value 来自服务,如果要在属性更改时更新视图,则需要实现 INotifyPropertyChanged 接口。

标签: mvvm xamarin.forms binding


【解决方案1】:

视图只能有一个绑定上下文。如果你想拥有多个,那是不可能的。但是我们有另一种方法来解决这个问题。首先你需要在你的 Viewmodelbase 中有这个属性(你需要在多个页面中绑定)。属性的值应该保存到首选项并从首选项中获取。要获取偏好的详细信息,请查看 Xamarin 基本要素

【讨论】:

  • 所有视图都绑定到 1 个上下文,因为它们每个都有一个单独的视图模型。我真的想要一个解决方案,其中视图模型中的属性引用同一个对象,并且当该对象发生更改时,应通知视图/视图模型以便绑定生效。对于我想要实现的目标,您的解决方案似乎有点太多了。难道没有其他方法可以实现这一目标吗?
  • 所以你应该在 viewmodel 中编写一个可扩展的属性,并且在视图中你可以将该属性称为 objectName.propertyName
【解决方案2】:

您可以有另一个选项,而不是为此值提供服务,您可以使用本地数据库来保存页面的信息,当您转到其他页面时检索更新的值,这可能在出现的覆盖上。

【讨论】:

    猜你喜欢
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 2011-07-04
    • 2018-01-31
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多