Xamarin 绑定上下文更改列表视图清空按钮文本
我已经面对这种奇怪的行为有一段时间了,我无法理解到底是什么导致了这个问题 我使用的是FreshMvvm,我有一个列表视图,里面有两个按钮 现在的问题是其中一个按钮从绑定中获取其文本,其次是使用我必须遵循的单击命令分配按钮 添加此项后,单击事件工作正常,但文本绑定不起作用。我怀疑这是由于绑定上下文更改造成的,我确信这是全部原因,但我无法找到修复此问题的方法。我的listview代码如下:Xamarin 绑定上下文更改列表视图清空按钮文本,xamarin,xamarin.forms,freshmvvm,Xamarin,Xamarin.forms,Freshmvvm,我已经面对这种奇怪的行为有一段时间了,我无法理解到底是什么导致了这个问题 我使用的是FreshMvvm,我有一个列表视图,里面有两个按钮 现在的问题是其中一个按钮从绑定中获取其文本,其次是使用我必须遵循的单击命令分配按钮 添加此项后,单击事件工作正常,但文本绑定不起作用。我怀疑这是由于绑定上下文更改造成的,我确信这是全部原因,但我无法找到修复此问题的方法。我的listview代码如下: <ListView Grid.Row="1" ItemsSource="{Bind
<ListView Grid.Row="1"
ItemsSource="{Binding CategoryAndActivities}"
x:Name="WishListName"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Frame>
<Grid VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!--Image and Title-->
<AbsoluteLayout Grid.Row="0"
HeightRequest="70"
IsClippedToBounds = "true">
<ffimageloading:CachedImage Source="{Binding ActivityImage}"
Aspect="AspectFill"
AbsoluteLayout.LayoutFlags="All"
AbsoluteLayout.LayoutBounds="0.0, 0.0, 0.3, 0.85"
Margin="5, 0, 5, 5"
ErrorPlaceholder="nopreviewlandscape"
LoadingPlaceholder="loadingicon"/>
<Label x:Name="ActivityNameLabel"
Text="{Binding ActivityName}"
FontAttributes="Bold"
VerticalTextAlignment="Start"
TextColor="{StaticResource price_text_color}"
FontSize="Small"
AbsoluteLayout.LayoutFlags="All"
AbsoluteLayout.LayoutBounds="1.0, 0.0, 0.7, 0.85"
Margin="5, 5, 5, 5">
</Label>
</AbsoluteLayout>
<!--Descp-->
<StackLayout Grid.Row = "1"
IsClippedToBounds="true">
<Label Text="{Binding AcitivityDescription}"
FontSize="Small"
LineBreakMode="WordWrap"
Margin="5, 0, 5, 5"/>
</StackLayout>
<Grid BackgroundColor="White"
Grid.Row = "2"
VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50*"/>
<ColumnDefinition Width="50*"/>
</Grid.ColumnDefinitions>
<Button BackgroundColor="{StaticResource ColorBrandingYellow}"
HorizontalOptions="FillAndExpand"
Command="{Binding AddToWishListCommand}"
Grid.Column="0"
BindingContext="{Binding Source={x:Reference ListName}, Path=BindingContext}"
CommandParameter="{Binding Source={x:Reference ActivityNameLabel},Path=BindingContext}"
TextColor="Black"
Text="{resourceLocal:Translate addToWishlist}"
FontSize = "Small" />
<Button BackgroundColor="{StaticResource ColorBrandingYellow}"
HorizontalOptions="FillAndExpand"
Grid.Column="1"
TextColor="Black"
Text="{Binding ActivityAmount}"
FontSize = "Small"
Command="{Binding GoFeatureActivityDetail}"
BindingContext="{Binding Source={x:Reference ListName}, Path=BindingContext}"
CommandParameter="{Binding Source={x:Reference ActivityNameLabel},Path=BindingContext}"/>
</Grid>
</Grid>
</Frame>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
public ICommand GoFeatureActivityDetail { get; set; }
public BrowseFeaturesPageModel()
{
AddToWishListCommand = new Command(WishListCommand);
GoFeatureActivityDetail = new Command(FeatureActivityDetailCommand);
}
private async void FeatureActivityDetailCommand(object obj)
{}
思维正确,执行不力 这里发生的事情是,您更改了按钮的
BindingContext
,现在它无法再“查看”项目的ActivityAmount
属性,因为它正在“查看”BrowseFeaturesPageModel
对象。
您可以简化操作,只在要使用的位置更改BindingContext
,而不是整个视图(本例中的按钮):
一个小时前就解决了,谢谢你的回答,但这是正确的,你刚刚节省了我自己回答的时间。谢谢,深夜密码可能会很愚蠢。你看,哈哈,我完全同意你的说法!
<Button BackgroundColor="{StaticResource ColorBrandingYellow}"
HorizontalOptions="FillAndExpand"
Grid.Column="1"
TextColor="Black"
Text="{Binding ActivityAmount}"
FontSize = "Small"
Command="{Binding BindingContext.GoFeatureActivityDetail, Source={x:Reference ListName}}"
CommandParameter="{Binding .}"/>