Xamarin 表单绑定 - 访问父属性

Posted

技术标签:

【中文标题】Xamarin 表单绑定 - 访问父属性【英文标题】:Xamarin Forms Binding - access parent property 【发布时间】:2018-11-20 18:24:33 【问题描述】:

我无法访问页面的 ViewModel 属性以将其绑定到 IsVisible 属性。如果我不设置BindingContext,我只能绑定它。有没有办法在设置 BindingContext 的同时访问页面的 viewmodel/root 属性?

页面 XAML:

<eventViews:EventInfoWidget BindingContext="Binding EventViewModel" IsVisible="Binding IsEventInfoWidgetEnabled" />
<eventViews:AvailableShiftInfoWidget BindingContext="Binding EventViewModel" IsVisible="Binding IsAvailableShiftInfoWidgetEnabled"></eventViews:AvailableShiftInfoWidget>

视图模型:

public EventViewModel EventViewModel  get; 
public bool IsEventInfoWidgetEnabled => _IsEventInfoWidgetEnabled.Value;
public bool IsAvailableShiftInfoWidgetEnabled => _IsAvailableShiftInfoWidgetEnabled.Value;

IsVisibile 属性只能绑定到 EventViewModel 对象属性,但我想将它绑定到页面的视图模型

IsEventInfoWidgetEnabled IsAvailableShiftInfoWidgetEnabled

【问题讨论】:

请解释您的视图模型。它有3个属性? “EventViewModel”、“_IsEventInfoWidgetEnabled”和“_IsAvailableShiftInfoWidgetEnabled”?尽管如此,您的 INPC 实施在哪里?请阅读 mvvm。 不幸的是,我使用的是定制的/非传统的 mvvm 实现(项目要求)。是的,视图模型具有这 3 个属性。 【参考方案1】:

找到解决方案,你必须指定来源,然后设置属性的路径。

先设置页面名称

<pages:AppContentPage 
xmlns="http://xamarin.com/schemas/2014/forms" 
x:Name="ShiftPage">

之后只需将 IsVisible 属性绑定到正确的源

IsVisible="Binding Source=x:Reference ShiftPage, Path=BindingContext.IsEventInfoWidgetEnabled "

【讨论】:

以上是关于Xamarin 表单绑定 - 访问父属性的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 表单:如何引用父绑定

Xamarin 表单 - GetBindingExpression

如何在xamarin表单的XAML中绑定类属性

Xamarin 表单从 listview 绑定到 viewmodel

如何选择项目 MVVM listview - Xamarin 表单

为啥当我尝试访问绑定对象的属性时 Xamarin 啥也不呈现?