2017-08-02 15 views
1

私は選択可能な自動車のマスターリストと、選択された自動車のIDを含む2番目のリストを持っています。Xamarin Pass親BindingContextコンバーターへの値

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プロパティも渡せません。この1

public class CarWithSelectionInfo : Car 
    public bool Selected {get; set;} 
end class 

のような車のクラスから継承する新しいクラスを作成し、2つの異なるリストを作成する代わりに、あなたのビューモデルでそれを管理する方法について

<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()) ? "√" : ""; 
    } 
} 

答えて

0

「車」モデルに「IsSelected」ブール値プロパティを追加するだけでよいと思います。 "true" または "false" プロパティ...

設定次に、あなたのValueConverterは

if(value != null && value is bool){ 

    if(((bool)value) == true) 
     return "√"; 
    else 
     return ""; 
} 
else 
    return ""; 
のようなものでなければなりません
関連する問題