Tengo un ObservableCollection que necesito hacer referencia para un elemento específico. Si el ítem no está allí, necesito monitorearlo a través de Reactive Extensions para cuando aparecen los ítems, pero necesito ayuda para configurar el enunciado. Todavía no estoy familiarizado con la forma en que todas las extensiones de Linq están pensadas para funcionar, por lo que no estoy seguro de cómo hacerlo. ¿Alguien puede señalarme en la dirección correcta?Uso de Rx (extensiones reactivas) para ver el elemento específico en ObservableCollection
Para ilustrar mejor, necesito algo como lo siguiente:
public class myitem :INotifyPropertyChanged
{
private string _key;
private string _value;
public string key
{
get { return _key; }
set { _key = value; NotifyPropertyChanged("key"); }
}
public string myvalue
{
//proper getter/setter, blah, blah
}
}
ObservableCollection<myitem> _collection = mycollection;
var x = Observable.FromEvent<NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs>(
h => new NotifyCollectionChangedEventHandler(h),
h => _collection.CollectionChanged += h,
h => _collection.CollectionChanged -= h);
string keywaitingfor = "thiskey";
string valuewaitingfor = x.Where(xx => xx.key == keywaitingfor).First().myvalue;
Esto no es exactamente mi situación, pero es de esperar que pueda ver lo que estoy tratando de hacer. El ObservableCollection puede no contener elementos para comenzar, y los valores de las propiedades se presentan de forma asincrónica. Sé que la última línea no es correcta, necesito tener un Observable en el evento clase PropertyChanged dentro de una lambda ... pero todavía estoy confundido acerca de cómo obtener ese valuewaiting para cuando se cumplan ambas condiciones.
ObservableCollection es una desafortunada elección de nombres ahora :(Esto es un bache en el camino cuando se hace entrenamiento con Rx. –
Parece que es exactamente lo que necesitaré. – Random
No me di cuenta de que ReactiveUI iba a ser una biblioteca tan extensa. se ve muy bien; solo desearía haberlo sabido hace unos meses, puede que no encaje en mi proyecto en este momento. Por lo tanto, aunque espero poder usarlo en el futuro, y es "una" respuesta, debe deseleccionarlo como la respuesta "aceptada". – Random