gpt4 book ai didi

xaml - Xamarin.Forms bindingContext 将源设置回根/父

转载 作者:行者123 更新时间:2023-12-01 01:01:25 24 4
gpt4 key购买 nike

我有一个 ViewModel使用不会被调用的命令 ( AddToFavoriteCommand )。现在它只处理 CustomPin class 中的命令。 ,而不是 viewModel .我正在设置我的 viewModelBindingContext在后面的代码中的页面。

但由于它枚举了我的 customPins 集合,因此它负责那里的命令。我需要回到根源。我可能需要更改源但无法使其正常工作。

<ContentPage.Content>
<StackLayout>
<AbsoluteLayout>
<Button Text="{Binding Filter}" Command="{Binding GotoFilterPageCommand}" />
</AbsoluteLayout>
<ListView x:Name="ListView" RowHeight="60" ItemsSource="{Binding CustomPins}" ItemSelected="OnItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.ContextActions>
<MenuItem Text="Favorite" Command="{Binding AddToFavoriteCommand}" />
<MenuItem Text="..." CommandParameter="{Binding .}" Clicked="OnMoreClicked" />
</ViewCell.ContextActions>
<StackLayout Padding="5" Orientation="Vertical" >
<Label Text="{Binding ParkingLot.Street}" FontSize="Medium" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage.Content>

背后的代码(删除了所有其他逻辑,例如我不需要的点击事件)
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class ParkingListPage : ContentPage
{
public ParkingListPage()
{
InitializeComponent();
BindingContext = new ParkingListViewModel();
}
}

我的 ViewModel
public class ParkingListViewModel
{
public ParkingListViewModel()
{
AddToFavoriteCommand = new Command(Test);
}

private void Test()
{
}

public IEnumerable<CustomPin> CustomPins { get; set; } = SampleParkings.Parkings;

public Command AddToFavoriteCommand { get; }
}

最佳答案

试试这样:

<ContentPage x:Name="YourPageName">
<ContentPage.Content>
<StackLayout>
<AbsoluteLayout>
<Button Text="{Binding Filter}" Command="{Binding GotoFilterPageCommand}" />
</AbsoluteLayout>
<ListView x:Name="ListView" RowHeight="60" ItemsSource="{Binding CustomPins}" ItemSelected="OnItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.ContextActions>
<MenuItem Text="Favorite" Command="{Binding Path=BindingContext.AddToFavoriteCommand, Source={x:Reference YourPageName}}" />
<MenuItem Text="..." CommandParameter="{Binding .}" Clicked="OnMoreClicked" />
</ViewCell.ContextActions>
<StackLayout Padding="5" Orientation="Vertical" >
<Label Text="{Binding ParkingLot.Street}" FontSize="Medium" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage.Content>
</ContentPage>

请注意我如何添加 x:Name元素到页面的根。当然还有更多的属性,把它们留在那里,但为了清楚起见,我把它们省略了。

其次,请注意我是如何从 MenuItem 中引用该名称的。绑定(bind)并添加 Path=BindingContext. .这样它将绑定(bind)到 BindingContext由名称标识的元素,在我们的例子中是 ContentPage .

可以在此处找到示例项目: https://github.com/jfversluis/SampleParentBinding

关于xaml - Xamarin.Forms bindingContext 将源设置回根/父,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45036081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com