Ваша проблема не с ValueConverter
, а с вашими привязками.
<CollectionView ItemsSource="{Binding Grupos}"
HeightRequest="50"
ItemsLayout="HorizontalList"
SelectionMode="Single"
SelectionChangedCommand="{Binding SelectedGrupoCommand, Mode=TwoWay}">
<CollectionView.ItemTemplate>
<DataTemplate>
<ContentView Padding="2">
<Frame BorderColor="Black"
HasShadow="False"
Padding="2"
BackgroundColor="{Binding ButtonBackColor, Converter={StaticResource ColorConverter}}">
<StackLayout>
<Label Margin="10"
Text="{Binding nombre}"
TextColor="{Binding TextColor, Converter = {StaticResource ColorConverter}}"
VerticalTextAlignment="Center"
HorizontalTextAlignment="Center"
FontSize="Small"
VerticalOptions="CenterAndExpand">
</Label>
</StackLayout>
</Frame>
</ContentView>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
Вы используете CollectionView
и когда вы устанавливаете ItemSource
<CollectionView ItemsSource="{Binding Grupos}"
Всепривязки, которые вы делаете внутри, примут это как BindingContext
.
<Label Margin="10"
Text="{Binding nombre}"
TextColor="{Binding TextColor, Converter = {StaticResource ColorConverter}}"
VerticalTextAlignment="Center"
HorizontalTextAlignment="Center"
FontSize="Small"
VerticalOptions="CenterAndExpand" />
Точно так же, как свойство nombre , которое вы связываете со свойством Label
Text
, является частью класса GroupModel
, то есть TextColor
иОжидается, что ButtonBackColor
свойства будут частью того же класса, который вы связали с ItemSource.
Если вы хотите, чтобы это работало: либо добавьте эти два свойства (TextColor
и ButtonBackColor
) кGroupModel
классифицируйте или измените привязку так, чтобы к этим двум свойствам обращались из родительской привязки.
Первое даст вам большую гибкость, но в то же время может добавить повторяющийся код (если все элементы будут совместно использоватьсянапример, того же цвета).
Второй вариант может быть выполнен следующим образом:
Добавьте имя к CollectionView
<CollectionView ItemsSource="{Binding Grupos}"
HeightRequest="50"
x:Name="GruposList"
....
Тогда мы изменимнемного привязка тех элементов, которые не являются частью вашего GrupoModel
, но являются частью ViewModel
<DataTemplate>
<ContentView Padding="2">
<Frame BorderColor="Black"
HasShadow="False"
Padding="2"
BackgroundColor="{Binding BindingContext.ButtonBackColor,
Source={x:Reference GruposList},
Converter={StaticResource ColorConverter}}">
<StackLayout>
<Label Margin="10"
Text="{Binding nombre}"
TextColor="{Binding BindingContext.TextColor,
Source={x:Reference GruposList},
Converter={StaticResource ColorConverter}}"
VerticalTextAlignment="Center"
HorizontalTextAlignment="Center"
FontSize="Small"
VerticalOptions="CenterAndExpand">
</Label>
</StackLayout>
</Frame>
</ContentView>
</DataTemplate>
Как вы можете видеть, мы теперь получаем доступ к ним через привязку CollectionView, мы делаем это, когда мыуказать источник и использоватьReference
. Подробнее о привязках здесь
Надеюсь, это поможет .-
Side Примечание:
В вашем конвертере следите за null .
var valor = value.ToString();
Вышеуказанное может привести к сбою приложения, если значение равно нулю.
Используйте это вместо:
var valor = value?.ToString();