Объявляю свойства
public static bool isOnline = false;
public static BindingList<Request> OnlineRequests { get; set; } = new BindingList<Request>();
public static BindingList<Request> CachedRequests { get; set; } = new BindingList<Request>();
public static BindingList<Request> Requests { get
{
if (isOnline)
{
return OnlineRequests;
}
else
{
return CachedRequests;
}
} set
{
if (isOnline)
{
OnlineRequests = value;
}
else
{
CachedRequests = value;
}
} }
Потом в Main
gridRequest.DataSource = Config.Requests;
Requests.ListChanged += requests_ListChanged;
DataSource мгновенно не изменяется при изменении переменной isOnline (требуется повторная привязка). Event ListChanged не срабатывает никогда
Вопрос. Возможно ли как-то синхронизировать всю логику, обращаясь исключительно к Requests
INotifyPropertyChanged, которое оповестит привязки о том, что оно обновилось. – EvgeniyZ Jun 07 '23 at 12:40private void requests_ListChanged(object sender, ListChangedEventArgs e) { if (!Requests.RaiseListChangedEvents) return; ....
Грубая привязка обоих Event ListChanged к этому методу и проверка, срабатывает ли Event в основной Requests
– RottenRat Jun 07 '23 at 12:50Requestsэто свойство, а не метод? Если у вас там еще и асинхронные задачи, где вы кэщируете серверные данные, то вообще это должно бытьValueTask. Ну и последнее, еслиgridRequest.DataSource- это UI контрол, то сделайте к нему правильную привязку (зависит от типа проекта), а свойства обновляйте черезINotifyPropertyChanged(в интернете полно реализаций и примеров), тогда вам не нужны будут события и что либо еще. – EvgeniyZ Jun 07 '23 at 13:03public BindingList<Request> Requests => IsOnline? OnlineRequests : CachedRequests;(никакихstaticбыть не должно!) далее при изменении свойстваIsOnlineв сеттере вызватьOnPropertyChanged(nameof(Requests)). – aepot Jun 07 '23 at 15:22