Xamarin.Forms 在 ListView 的 ViewCell 中获取 ViewModel 作为 BindingContext
Xamarin.Forms get ViewModel as BindingContext in ViewCell of ListView
我在FlowListView中添加了DataTemplateSelector
(与ListView
基本相同)。
<ContentView
...
BindingContext="{Binding PatientImageListVM, Source={StaticResource VMLocator}}">
...
<flv:FlowListView
...
HasUnevenRows="true">
<flv:FlowListView.FlowColumnTemplate>
<local:PatientImageListDataTemplateSelector/>
</flv:FlowListView.FlowColumnTemplate>
</flv:FlowListView>
</ContentView>
我使用此代码获取具有绑定的单元格。
button.SetBinding(Button.CommandParameterProperty, ".");
但我想使用 ViewModel
中的一些变量与 DataTemplateSelector
中的 ContentView
绑定。我试过这段代码但没有用。
label.SetBinding(Label.IsVisibleProperty,
"{Binding BindingContext.LabelVisibility, Source={x:Reference Page}}");
如何在 DataTemplateSellector
中获取 ViewModel
中的变量?
label.SetBinding(Label.IsVisibleProperty, new Binding("BindingContext.LabelVisibility", source: this));
这应该有效。您应该将 "Page" 传递给您与 "this" 的绑定。因此,您应该在创建 ItemTemplate
时设置绑定
lv.ItemTemplate = new DataTemplate(() =>
{
//....
label.SetBinding(Label.IsVisibleProperty, new Binding("BindingContext.LabelVisibility", source: this));
}
我在FlowListView中添加了DataTemplateSelector
(与ListView
基本相同)。
<ContentView
...
BindingContext="{Binding PatientImageListVM, Source={StaticResource VMLocator}}">
...
<flv:FlowListView
...
HasUnevenRows="true">
<flv:FlowListView.FlowColumnTemplate>
<local:PatientImageListDataTemplateSelector/>
</flv:FlowListView.FlowColumnTemplate>
</flv:FlowListView>
</ContentView>
我使用此代码获取具有绑定的单元格。
button.SetBinding(Button.CommandParameterProperty, ".");
但我想使用 ViewModel
中的一些变量与 DataTemplateSelector
中的 ContentView
绑定。我试过这段代码但没有用。
label.SetBinding(Label.IsVisibleProperty,
"{Binding BindingContext.LabelVisibility, Source={x:Reference Page}}");
如何在 DataTemplateSellector
中获取 ViewModel
中的变量?
label.SetBinding(Label.IsVisibleProperty, new Binding("BindingContext.LabelVisibility", source: this));
这应该有效。您应该将 "Page" 传递给您与 "this" 的绑定。因此,您应该在创建 ItemTemplate
时设置绑定lv.ItemTemplate = new DataTemplate(() =>
{
//....
label.SetBinding(Label.IsVisibleProperty, new Binding("BindingContext.LabelVisibility", source: this));
}