У меня есть ListView отображающий список файлов. При добавлении в ListView предметов, background у добавленного элемента должен быть красным, так как изначально у добавленных файлов MessageFileId == null. Потом для какого либо элемента я меняю MessageFileId на какое либо значение. И когда MessageFileId != null, нужно что бы background у этого элемента стал зеленым. Как такое сделать? На данный момент все элементы имеют только background красного цвета.
ViewModel:
public class TicketAttachFiles
{
public string AttachFilePath { get; set; }
public int? MessageFileId { get; set; }
}
public ObservableCollection<TicketAttachFiles> AttachFiles { get; set; }
Viev:
<ListView Grid.Row="2" Grid.Column="0" Background="Transparent"
ItemsSource="{Binding AttachFiles, UpdateSourceTrigger=PropertyChanged}">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem" d:DataContext="{Binding AttachFiles, UpdateSourceTrigger=PropertyChanged}">
<Style.Triggers>
<DataTrigger Binding="{Binding TicketMessageFileId, UpdateSourceTrigger=PropertyChanged}" Value="{x:Null}">
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<fa:ImageAwesome Icon="PictureOutline" />
<TextBlock Grid.Row="1"
Text="{Binding Path=AttachFilePath}" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
После того как я для какого либо элемента установлю значение поля MessageFileId, у этого элемента не пропадает фон красного цвета.

ListView.ItemContainerStyleвся привязка работает с главной VM, а не с VM текущегоListViewItem. Перенесите триггер внутрьDataTemplate(который внутриListView.ItemTemplate) и уже там меняйте что вам угодно. – EvgeniyZ Feb 21 '19 at 15:07