gpt4 book ai didi

xaml - Xamarin 将父 BindingContext 值传递给转换器

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

我有一个可选汽车的主列表,以及一个包含所选汽车 ID 的第二个列表。

public class SelectCarsViewModel : BindableBase 
{
public IList<Car> Cars = new List<Car>();
public IList<string> SelectedCars = new List<string>();
}

public class Car
{
public string Id {get; set;}
}

我需要在每辆选定的汽车旁边显示一个复选标记。我试图通过开发一个转换器来实现这一点,该转换器采用当前汽车的 ID 和 SelectedCars 列表。我在从 XAML 传递 SelectedCars 列表时遇到困难。我可以传递 SelectCarsPage,但不能传递它的 BindingContext 或它的 SelectedCars 属性。

<ContentPage x:Name="SelectCarsPage">
<ListView ItemsSource=Cars>
<ListView.ItemTemplate>
<DataTemplate>
<Label Text="{Binding Id, Converter={StaticResource IsCarSelected}, ConverterParameter={Binding Source={x:Reference Name=SelectCarsPage}, Path=SelectedCars}}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>

public class IsCarSelected : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
//parameter is SelectCarsPage and not the SelectedCars list.

//I'd eventually like to get the following to work
var selectedCars = (List<string>)parameter;
return selectedCars.Contains(value.ToString()) ? "√" : "";
}
}

最佳答案

<Label Text="{Binding Id, Converter={StaticResource IsCarSelected}, ConverterParameter={Binding Source={x:Reference Name=SelectCarsPage}, Path=BindingContext.SelectedCars}}"/>

当您执行绑定(bind)引用/源时,您不会绑定(bind)到 BindingContext,而是绑定(bind)到控件本身。如果你想从它的 BindingContext( View 模型)访问一个属性,你必须像这样设置路径:

Path=BindingContext.SelectedCars

这种绑定(bind)命中控件本身,因为它允许获取高度、宽度、可见性等属性的值。如果您需要其 BindingContext 中的属性,请使用 BindingContext 对象,然后定位您需要的属性。

祝你好运!

关于xaml - Xamarin 将父 BindingContext 值传递给转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45464174/

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