У меня есть ObservableCollection из Чат класса библиотеки Telegram ( TDLib ), и я не могу получить доступ, чтобы изменить этот класс и реализовать INotifyPropertyChanged и OnPropertyChanged для peroperies. и у меня есть ListView в моем приложении (C# WPF. NET Core)
ViewModel:
public class ListChatViewModel : BaseViewModel
{
public ListChatViewModel()
{
chats = new ObservableCollection<TdApi.Chat>();
}
private ObservableCollection<TdApi.Chat> chats;
public ObservableCollection<TdApi.Chat> Chats
{
get => chats;
set => SetField(ref chats, value, "Chats");
}
}
StaticClass:
public class Statics
{
public static ListChatViewModel ListChatViewModel = new ListChatViewModel();
}
PageListView.xaml:
<ListView x:Name="lv_items" Grid.Row="0" VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.ScrollUnit="Pixel" VirtualizingPanel.IsVirtualizingWhenGrouping="True" VirtualizingPanel.CacheLength="50" VirtualizingPanel.CacheLengthUnit="Pixel" ItemContainerStyle="{StaticResource listViewItemMainChatListStyle}" ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Hidden" SelectionChanged="lv_items_SelectionChanged">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel IsVirtualizing="True" VirtualizationMode="Recycling" />
</ItemsPanelTemplate>
</ListView.ItemsPanel><ListView.ItemTemplate>
<DataTemplate>
<Grid MinHeight="70" Background="#31394D">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Margin="16,0,0,0" Width="42" Height="42" CornerRadius="42" Background="{Binding Photo, Converter={StaticResource ChatPhotoNullToColorConverter}}"/>
<StackPanel Grid.Column="1" Margin="8,0,8,0" VerticalAlignment="Center">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Title}" TextTrimming="CharacterEllipsis" Foreground="#CED4E6" FontSize="14" FontFamily="Roboto"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Opacity="0.7">
<TextBlock Text="{Binding LastMessage.Text}" Foreground="#CED4E6" VerticalAlignment="Center" Margin="4,0,0,0" FontFamily="Roboto"/>
</StackPanel>
</StackPanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
PageListView.cs:
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
lv_items.ItemsSource = Statics.ListChatViewModel.Chats;
}
Теперь, как я могу обновить LastMessage из чата? Я использую этот код для обновления LastMessage, но пользовательский интерфейс не обновляется
var chat = Statics.ListChatViewModel.Chats.FirstOrDefault(a => a.Id == updateChatLastMessage.ChatId);
chat.LastMessage = updateChatLastMessage.LastMessage;