我有一个ContentPage,上面有两个ContentView,我想为每个ContentView设置绑定上下文。
<Label
BindingContext="{Binding Source ={local:ViewModel1 }}"
Text="{Binding LabelText}"
HorizontalOptions="Center"
HorizontalTextAlignment="Center" />
<Label
BindingContext="{Binding Source ={local:ViewModel2 }}"
Text="{Binding LabelText}"
HorizontalOptions="Center"
HorizontalTextAlignment="Center" />
它是工作,但我有错误-
'local:ViewModel1' is used like a markup extension but
'local:ViewModel2' is used like a markup extension but
毫无理由
2条答案
按热度按时间jobtbby31#
您可以尝试以下代码。
ViewModel1.cs:
ViewModel2.cs:
XAML:
有关如何设置Label的BindingContext的详细信息,请参阅MS docs. https://learn.microsoft.com/en-us/xamarin/xamarin-forms/xaml/xaml-basics/data-bindings-to-mvvm
xwmevbvl2#
选项1:XML属性语法中的BindingContext
若要隐藏警告,而且如果不需要使用XML属性语法,请将
BindingContext="{Binding Source ={local:ViewModel1}}"
转换为Map的property项目语法,如下所示。备注:
因为
BindingContext
是object
类型,所以你不需要Binding
标记扩展。你的BindingContext="{Binding Source ={local:ViewModel1}}"
可以简化为BindingContext="{local:ViewModel1}"
。但是,这两个都触发了你在问题中提到的相同的警告(而不是错误)。选项2:使用资源字典
将以下代码添加到
Label
的祖先中。如果您不知道选择哪个祖先,
ContentPage
是可以的,因此标记变为现在您可以按如下方式使用静态资源。
BindingContext="{StaticResource Key=vm1}"
也可以简化为BindingContext="{StaticResource vm1}"
,因为Key
被标记为StaticResourceExtension
的内容属性。