В общем, если вы знаете, как использовать привязку для вашего GridView для отображения данных, вы также должны знать, что привязка может сделать большинство вещей для вас.В вашем случае не было никаких сомнений, что привязка также может помочь вам в достижении вашей цели.
Вам просто нужно объявить дополнительное свойство в качестве фона каждого элемента.Затем вы можете использовать оператор linq, чтобы найти конкретные элементы из коллекции и изменить значение их свойства.
Я только что сделал для вас пример кода в соответствии с вашим фрагментом кода выше.
<GridView x:Name="MyGridView" ItemsSource="{x:Bind list}">
<GridView.ItemTemplate>
<DataTemplate x:DataType="local:SampleModel">
<Grid Height="112" Padding="12" Width="227" Background="{x:Bind ItemBackground,Mode=OneWay}">
<TextBlock HorizontalAlignment="Center"
Text="{x:Bind Description}"/>
</Grid>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
public class SampleModel:INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string PropertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this,new PropertyChangedEventArgs(PropertyName));
}
}
private int _Id;
public int Id
{
get => _Id;
set
{
if (_Id != value)
{
_Id = value;
RaisePropertyChanged("Id");
}
}
}
private string _Description;
public string Description
{
get =>_Description;
set
{
if (_Description != value)
{
_Description = value;
RaisePropertyChanged("Description");
}
}
}
private SolidColorBrush _ItemBackground = new SolidColorBrush(Colors.Transparent);
public SolidColorBrush ItemBackground
{
get => _ItemBackground;
set
{
if (_ItemBackground !=value)
{
_ItemBackground = value;
RaisePropertyChanged("ItemBackground");
}
}
}
}
private ObservableCollection<SampleModel> list { get; set; }
public MainPage()
{
this.InitializeComponent();
list = new ObservableCollection<SampleModel>
{
new SampleModel { Id = 1, Description = "Apple" },
new SampleModel { Id = 2, Description = "Orange" },
new SampleModel { Id = 3, Description = "Banana" }
};
}
var tem_list = list.Where(x => x.Id == 1|| x.Id == 2).ToList();
foreach (var item in tem_list)
{
item.ItemBackground = new SolidColorBrush(Colors.LightYellow);
}