Я хочу изменить цвет фона элемента списка, когда строка в базе данных SQLite равна 1
Мой код выглядит так
public void getMailsFromDb()
{
string myConnString = "Data Source=db.s3db;Version=3;";
string mySelectQuery = "SELECT * FROM `emails` ORDER BY `date` DESC, `time` DESC";
SQLiteConnection sqConnection = new SQLiteConnection(myConnString);
SQLiteCommand sqCommand = new SQLiteCommand(mySelectQuery, sqConnection);
sqConnection.Open();
try
{
SQLiteDataReader sqReader = sqCommand.ExecuteReader();
while (sqReader.Read())
{
string from = sqReader.GetString(sqReader.GetOrdinal("sender"));
string subject = sqReader.GetString(sqReader.GetOrdinal("subject"));
string msgid = sqReader.GetString(sqReader.GetOrdinal("messageId"));
App.Current.Dispatcher.Invoke((Action)delegate
{
ListBoxData.Add(new EmailEntry { from = from, subject = subject, messageID = msgid });
// HERE IS THE PLACE WHERE I WANT TO CHANGE THE BG COLOUR OF THE LISTBOX ITEM
});
}
sqReader.Close();
}
catch
{
MessageBox.Show("Problems reading mails from database!", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
finally
{
sqConnection.Close();
}
Я считаю, что следует использовать триггер данных. Однако я не уверен, как это использовать. Я новичок в WPF. Но это мой XAML ListBox
<ListBox Name="EmailList" ItemsSource="{Binding ListBoxData, Mode=TwoWay}" HorizontalContentAlignment="Stretch" Margin="10" SelectionChanged="EmailEntry_SelectionChanged">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border BorderBrush="#000000" BorderThickness="0 0 0 1" Name="Border" Margin="0" Padding="0" SnapsToDevicePixels="true">
<ContentPresenter />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter TargetName="Border" Property="Background" Value="#dcdcdc" />
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="Border" Property="Background" Value="#f0f0f0"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel HorizontalAlignment="Stretch" Tag="{Binding messageID}">
<TextBlock Name="fromTxt" Text="{Binding from}" HorizontalAlignment="Stretch"/>
<TextBlock Name="subjectTxt" Text="{Binding subject}" HorizontalAlignment="Stretch"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
У меня работают обычные триггеры, для наведения мыши и так далее. Но я запутался в части триггера данных, когда ее следует использовать в коде, который, как я полагаю, вызван. Кто-нибудь может помочь?