ReactiveUI IObservedChange is a generic interface that replaces the non-generic PropertyChangedEventArgs. Note that it is used for both Changing (i.e. 'before change') and Changed Observables. In the future, this interface will be Covariant which will allow simpler casting between specific and generic changes. The object that has raised the change. The name of the property that has changed on Sender. The value of the property that has changed. IMPORTANT NOTE: This property is often not set for performance reasons, unless you have explicitly requested an Observable for a property via a method such as ObservableForProperty. To retrieve the value for the property, use the Value() extension method. IReactiveNotifyPropertyChanged represents an extended version of INotifyPropertyChanged that also exposes Observables. IEnableLogger is a dummy interface - attaching it to any class will give you access to the Log() method. When this method is called, an object will not fire change notifications (neither traditional nor Observable notifications) until the return value is disposed. An object that, when disposed, reenables change notifications. Represents an Observable that fires *before* a property is about to be changed. Note that this should not fire duplicate change notifications if a property is set to the same value multiple times. Represents an Observable that fires *after* a property has changed. Note that this should not fire duplicate change notifications if a property is set to the same value multiple times. IReactiveNotifyPropertyChanged of TSender is a helper interface that adds typed versions of Changing and Changed. IReactiveCollection represents a collection that can notify when its contents are changed (either items are added/removed, or the object itself changes). It is important to implement the Changing/Changed from IReactiveNotifyPropertyChanged semantically as "Fire when *anything* in the collection or any of its items have changed, in any way". Fires when items are added to the collection, once per item added. Functions that add multiple items such AddRange should fire this multiple times. The object provided is the item that was added. Fires before an item is going to be added to the collection. Fires once an item has been removed from a collection, providing the item that was removed. Fires before an item will be removed from a collection, providing the item that will be removed. Fires whenever the number of items in a collection has changed, providing the new Count. Fires before a collection is about to change, providing the previous Count. Provides Item Changed notifications for any item in collection that implements IReactiveNotifyPropertyChanged. This is only enabled when ChangeTrackingEnabled is set to True. Provides Item Changing notifications for any item in collection that implements IReactiveNotifyPropertyChanged. This is only enabled when Enables the ItemChanging and ItemChanged properties; when this is enabled, whenever a property on any object implementing IReactiveNotifyPropertyChanged changes, the change will be rebroadcast through ItemChanging/ItemChanged. IReactiveCollection of T is the typed version of IReactiveCollection and adds type-specified versions of Observables IMessageBus represents an object that can act as a "Message Bus", a simple way for ViewModels and other objects to communicate with each other in a loosely coupled way. Specifying which messages go where is done via a combination of the Type of the message as well as an additional "Contract" parameter; this is a unique string used to distinguish between messages of the same Type, and is arbitrarily set by the client. Listen provides an Observable that will fire whenever a Message is provided for this object via RegisterMessageSource or SendMessage. The type of the message to listen to. A unique string to distinguish messages with identical types (i.e. "MyCoolViewModel") - if the message type is only used for one purpose, leave this as null. Determins if a particular message Type is registered. The type of the message. A unique string to distinguish messages with identical types (i.e. "MyCoolViewModel") - if the message type is only used for one purpose, leave this as null. True if messages have been posted for this message Type. Registers an Observable representing the stream of messages to send. Another part of the code can then call Listen to retrieve this Observable. The type of the message to listen to. An Observable that will be subscribed to, and a message sent out for each value provided. A unique string to distinguish messages with identical types (i.e. "MyCoolViewModel") - if the message type is only used for one purpose, leave this as null. Sends a single message using the specified Type and contract. Consider using RegisterMessageSource instead if you will be sending messages in response to other changes such as property changes or events. The type of the message to send. The actual message to send A unique string to distinguish messages with identical types (i.e. "MyCoolViewModel") - if the message type is only used for one purpose, leave this as null. Log returns the current logger object, which allows the object to log messages with the type name attached. This data structure is a representation of a memoizing cache - i.e. a class that will evaluate a function, but keep a cache of recently evaluated parameters. Since this is a memoizing cache, it is important that this function be a "pure" function in the mathematical sense - that a key *always* maps to a corresponding return value. The type of the parameter to the calculation function. The type of the value returned by the calculation function. Constructor The function whose results you want to cache, which is provided the key value, and an Tag object that is user-defined The size of the cache to maintain, after which old items will start to be thrown out. A function to call when a result gets evicted from the cache (i.e. because Invalidate was called or the cache is full) Evaluates the function provided, returning the cached value if possible The value to pass to the calculation function. An additional optional user-specific parameter. Ensure that the next time this key is queried, the calculation function will be called. Invalidate all items in the cache Returns all values currently in the cache MessageBus represents an object that can act as a "Message Bus", a simple way for ViewModels and other objects to communicate with each other in a loosely coupled way. Specifying which messages go where is done via a combination of the Type of the message as well as an additional "Contract" parameter; this is a unique string used to distinguish between messages of the same Type, and is arbitrarily set by the client. Listen provides an Observable that will fire whenever a Message is provided for this object via RegisterMessageSource or SendMessage. The type of the message to listen to. A unique string to distinguish messages with identical types (i.e. "MyCoolViewModel") - if the message type is only used for one purpose, leave this as null. An Observable representing the notifications posted to the message bus. Determins if a particular message Type is registered. The Type of the message to listen to. A unique string to distinguish messages with identical types (i.e. "MyCoolViewModel") - if the message type is only used for one purpose, leave this as null. True if messages have been posted for this message Type. Registers an Observable representing the stream of messages to send. Another part of the code can then call Listen to retrieve this Observable. The type of the message to listen to. An Observable that will be subscribed to, and a message sent out for each value provided. A unique string to distinguish messages with identical types (i.e. "MyCoolViewModel") - if the message type is only used for one purpose, leave this as null. The scheduler on which to post the notifications, RxApp.DeferredScheduler by default. Sends a single message using the specified Type and contract. Consider using RegisterMessageSource instead if you will be sending messages in response to other changes such as property changes or events. The type of the message to send. The actual message to send A unique string to distinguish messages with identical types (i.e. "MyCoolViewModel") - if the message type is only used for one purpose, leave this as null. The scheduler on which to post the notifications, RxApp.DeferredScheduler by default. Returns the Current MessageBus from the RxApp global object. Registers a ViewModel object to send property change messages; this allows a ViewModel to listen to another ViewModel's changes in a loosely-typed manner. The ViewModel to register A unique string to distinguish messages with identical types (i.e. "MyCoolViewModel") - if the message type is only used for one purpose, leave this as null. ExceptionThe registered ViewModel must be the only instance (i.e. not in an ItemsControl) Listens to a registered ViewModel's property change notifications. A unique string to distinguish messages with identical types (i.e. "MyCoolViewModel") - if the message type is only used for one purpose, leave this as null. An Observable that fires when an object changes and provides the property name that has changed. Return the current instance of the ViewModel with the specified type. A unique string to distinguish messages with identical types (i.e. "MyCoolViewModel") - if the message type is only used for one purpose, leave this as null. The ViewModel object registered for this type. ObservableAsPropertyHelper is a class to help ViewModels implement "output properties", that is, a property that is backed by an Observable. The property will be read-only, but will still fire change notifications. This class can be created directly, but is more often created via the ToProperty and ObservableToProperty extension methods. This class is also an Observable itself, so that output properties can be chained - for example a "Path" property and a chained "PathFileNameOnly" property. Constructs an ObservableAsPropertyHelper object. The Observable to base the property on. The action to take when the property changes, typically this will call the ViewModel's RaisePropertyChanged method. The initial value of the property. The scheduler that the notifications will be provided on - this should normally be a Dispatcher-based scheduler (and is by default) Constructs a "default" ObservableAsPropertyHelper object. This is useful for when you will initialize the OAPH later, but don't want bindings to access a null OAPH at startup. The initial (and only) value of the property. The scheduler that the notifications will be provided on - this should normally be a Dispatcher-based scheduler (and is by default) The last provided value from the Observable. Returns the Exception which has been provided by the Observable; normally steps should be taken to ensure that Observables provided to OAPH should never complete or fail. Converts an Observable to an ObservableAsPropertyHelper and automatically provides the onChanged method to raise the property changed notification. The ToProperty method is semantically equivalent to this method and is often more convenient. The Observable to base the property on. An Expression representing the property (i.e. 'x => x.SomeProperty' The initial value of the property. The scheduler that the notifications will be provided on - this should normally be a Dispatcher-based scheduler (and is by default) An initialized ObservableAsPropertyHelper; use this as the backing field for your property. Converts an Observable to an ObservableAsPropertyHelper and automatically provides the onChanged method to raise the property changed notification. The ReactiveObject that has the property An Expression representing the property (i.e. 'x => x.SomeProperty' The initial value of the property. The scheduler that the notifications will be provided on - this should normally be a Dispatcher-based scheduler (and is by default) An initialized ObservableAsPropertyHelper; use this as the backing field for your property. ObservableAsyncMRUCache implements memoization for asynchronous or expensive to compute methods. This memoization is an MRU-based cache with a fixed limit for the number of items in the cache. This class guarantees that only one calculation for any given key is in-flight at a time, subsequent requests will wait for the first one and return its results (for example, an empty web image cache that receives two concurrent requests for "Foo.jpg" will only issue one WebRequest - this does not mean that a request for "Bar.jpg" will wait on "Foo.jpg"). Concurrency is also limited by the maxConcurrent parameter - when too many in-flight operations are in progress, further operations will be queued until a slot is available. The key type. The type of the value to return from the cache. Constructs an ObservableAsyncMRUCache object. The function that performs the expensive or asyncronous calculation and returns an async result - for CPU-based operations, Observable.Return may be used to return the result. Note that this function *must* return an equivalently-same result given a specific input - because the function is being memoized, if the calculationFunc depends on other varables other than the input value, the results will be unpredictable. The number of items to cache. When this limit is reached, not recently used items will be discarded. The maximum number of concurrent asynchronous operations regardless of key - this is important for web-based caches to limit the number of concurrent requests to a server. The default is 5. This optional method is called when an item is evicted from the cache - this can be used to clean up / manage an on-disk cache; the calculationFunc can download a file and save it to a temporary folder, and the onRelease action will delete the file. The scheduler to run asynchronous operations on - defaults to TaskpoolScheduler Issues an request to fetch the value for the specified key as an async operation. The Observable returned will fire one time when the async operation finishes. If the operation is cached, an Observable that immediately fires upon subscribing will be returned. The key to provide to the calculation function. Returns an Observable representing the future result. The synchronous version of AsyncGet - it will issue a request for the value of a specific key and wait until the value can be provided. The key to provide to the calculation function. The resulting value. Works like SelectMany, but memoizes selector calls. In addition, it guarantees that no more than 'maxConcurrent' selectors are running concurrently and queues the rest. This is very important when using web services to avoid potentially spamming the server with hundreds of requests. A selector similar to one you would pass as a parameter passed to SelectMany. Note that similarly to ObservableAsyncMRUCache.AsyncGet, a selector must return semantically identical results given the same key - i.e. it must be a 'function' in the mathematical sense. The number of items to cache. When this limit is reached, not recently used items will be discarded. The maximum number of concurrent asynchronous operations regardless of key - this is important for web-based caches to limit the number of concurrent requests to a server. The default is 5. An Observable representing the flattened results of the selector. Works like SelectMany, but memoizes selector calls. In addition, it guarantees that no more than 'maxConcurrent' selectors are running concurrently and queues the rest. This is very important when using web services to avoid potentially spamming the server with hundreds of requests. This overload is useful when making the same web service call in several places in the code, to ensure that all of the code paths are using the same cache. An already-configured ObservableAsyncMRUCache. An Observable representing the flattened results of the cache selector. Returns the current value of a property given a notification that it has changed. The current value of the property Attempts to return the current value of a property given a notification that it has changed. If any property in the property expression is null, false is returned. The value of the property expression. True if the entire expression was able to be followed, false otherwise Given a fully filled-out IObservedChange object, SetValueToProperty will apply it to the specified object (i.e. it will ensure that target.property == This.GetValue() and "replay" the observed change onto another object) The target object to apply the change to. The target property to apply the change to. Given a stream of notification changes, this method will convert the property changes to the current value of the property. An Observable representing the stream of current values of the given change notification stream. ValueIfNotDefault is similar to Value(), but filters out null values from the stream. An Observable representing the stream of current values of the given change notification stream. Given a stream of notification changes, this method will convert the property changes to the current value of the property. BindTo takes an Observable stream and applies it to a target property. Conceptually it is similar to "Subscribe(x => target.property = x)", but allows you to use child properties without the null checks. The target object whose property will be set. An expression representing the target property to set. This can be a child property (i.e. x.Foo.Bar.Baz). An object that when disposed, disconnects the binding. The type of the objects in the collection. Constructs a ReactiveCollection. Constructs a ReactiveCollection given an existing list. The existing list with which to populate the new list. When this method is called, an object will not fire change notifications (neither traditional nor Observable notifications) until the return value is disposed. An object that, when disposed, reenables change notifications. Fires when items are added to the collection, once per item added. Functions that add multiple items such as AddRange should fire this multiple times. The object provided is the item that was added. Fires before an item is going to be added to the collection. Fires once an item has been removed from a collection, providing the item that was removed. Fires before an item will be removed from a collection, providing the item that will be removed. Fires before a collection is about to change, providing the previous Count. Fires whenever the number of items in a collection has changed, providing the new Count. Provides Item Changed notifications for any item in collection that implements IReactiveNotifyPropertyChanged. This is only enabled when ChangeTrackingEnabled is set to True. Provides Item Changing notifications for any item in collection that implements IReactiveNotifyPropertyChanged. This is only enabled when Fires when anything in the collection or any of its items (if Change Tracking is enabled) are about to change. Fires when anything in the collection or any of its items (if Change Tracking is enabled) have changed. Enables the ItemChanging and ItemChanged properties; when this is enabled, whenever a property on any object implementing IReactiveNotifyPropertyChanged changes, the change will be rebroadcast through ItemChanging/ItemChanged. Creates a collection based on an an Observable by adding items provided until the Observable completes, optionally ensuring a delay. Note that if the Observable never completes and withDelay is set, this method will leak a Timer. This method also guarantees that items are always added via the UI thread. The Observable whose items will be put into the new collection. If set, items will be populated in the collection no faster than the delay provided. A new collection which will be populated with the Observable. Creates a collection based on an an Observable by adding items provided until the Observable completes, optionally ensuring a delay. Note that if the Observable never completes and withDelay is set, this method will leak a Timer. This method also guarantees that items are always added via the UI thread. The Observable whose items will be put into the new collection. A Select function that will be run on each item. If set, items will be populated in the collection no faster than the delay provided. A new collection which will be populated with the Observable. Creates a collection whose contents will "follow" another collection; this method is useful for creating ViewModel collections that are automatically updated when the respective Model collection is updated. A Select function that will be run on each item. A new collection whose items are equivalent to Collection.Select(selector) and will mirror the initial collection. ObservableForProperty returns an Observable representing the property change notifications for a specific property on a ReactiveObject. This method (unlike other Observables that return IObservedChange) guarantees that the Value property of the IObservedChange is set. An Expression representing the property (i.e. 'x => x.SomeProperty.SomeOtherProperty' If True, the Observable will notify immediately before a property is going to change. An Observable representing the property change notifications for the given property. ObservableForProperty returns an Observable representing the property change notifications for a specific property on a ReactiveObject, running the IObservedChange through a Selector function. An Expression representing the property (i.e. 'x => x.SomeProperty' A Select function that will be run on each item. If True, the Observable will notify immediately before a property is going to change. An Observable representing the property change notifications for the given property. ReactiveObject is the base object for ViewModel classes, and it implements INotifyPropertyChanged. In addition, ReactiveObject provides Changing and Changed Observables to monitor object changes. When this method is called, an object will not fire change notifications (neither traditional nor Observable notifications) until the return value is disposed. An object that, when disposed, reenables change notifications. Represents an Observable that fires *before* a property is about to be changed. Represents an Observable that fires *after* a property has changed. RaiseAndSetIfChanged fully implements a Setter for a read-write property on a ReactiveObject, making the assumption that the property has a backing field named "_NameOfProperty". To change this assumption, set RxApp.GetFieldNameForPropertyNameFunc. An Expression representing the property (i.e. 'x => x.SomeProperty' The new value to set the property to, almost always the 'value' keyword. The newly set value, normally discarded. RaiseAndSetIfChanged fully implements a Setter for a read-write property on a ReactiveObject, making the assumption that the property has a backing field named "_NameOfProperty". To change this assumption, set RxApp.GetFieldNameForPropertyNameFunc. This overload is intended for Silverlight and WP7 where reflection cannot access the private backing field. An Expression representing the property (i.e. 'x => x.SomeProperty' A Reference to the backing field for this property. The new value to set the property to, almost always the 'value' keyword. The newly set value, normally discarded. Use this method in your ReactiveObject classes when creating custom properties where raiseAndSetIfChanged doesn't suffice. An Expression representing the property (i.e. 'x => x.SomeProperty' Use this method in your ReactiveObject classes when creating custom properties where raiseAndSetIfChanged doesn't suffice. An Expression representing the property (i.e. 'x => x.SomeProperty' RaisePropertyChanging is a helper method intended for test / mock scenarios to manually fake a property change. The ReactiveObject to invoke raisePropertyChanging on. The property that will be faking a change. RaisePropertyChanging is a helper method intended for test / mock scenarios to manually fake a property change. The ReactiveObject to invoke raisePropertyChanging on. The property that will be faking a change. RaisePropertyChanged is a helper method intended for test / mock scenarios to manually fake a property change. The ReactiveObject to invoke raisePropertyChanging on. The property that will be faking a change. RaisePropertyChanged is a helper method intended for test / mock scenarios to manually fake a property change. The ReactiveObject to invoke raisePropertyChanging on. The property that will be faking a change. This class helps you take existing objects and make them compatible with ReactiveUI and Rx.Net. To use this, declare an instance field of this class in your class, initialize it in your Constructor, make your class derive from IReactiveNotifyPropertyChanged, then implement all of the properties/methods using MakeObjectReactiveHelper. InUnitTestRunner attempts to determine heuristically if the current application is running in a unit test framework. True if we have determined that a unit test framework is currently running. GetFieldNameForProperty returns the corresponding backing field name for a given property name, using the convention specified in GetFieldNameForPropertyNameFunc. The name of the property whose backing field needs to be found. The backing field name. DeferredScheduler is the scheduler used to schedule work items that should be run "on the UI thread". In normal mode, this will be DispatcherScheduler, and in Unit Test mode this will be Immediate, to simplify writing common unit tests. TaskpoolScheduler is the scheduler used to schedule work items to run in a background thread. In both modes, this will run on the TPL Task Pool (or the normal Threadpool on Silverlight). Set this property to implement a custom logger provider - the string parameter is the 'prefix' (usually the class name of the log entry) Set this property to implement a custom MessageBus for MessageBus.Current. Set this property to override the default field naming convention of "_PropertyName" with a custom one. WhenAny allows you to observe whenever one or more properties on an object have changed, providing an initial value when the Observable is set up, unlike ObservableForProperty(). Use this method in constructors to set up bindings between properties that also need an initial setup. WhenAny allows you to observe whenever one or more properties on an object have changed, providing an initial value when the Observable is set up, unlike ObservableForProperty(). Use this method in constructors to set up bindings between properties that also need an initial setup. WhenAny allows you to observe whenever one or more properties on an object have changed, providing an initial value when the Observable is set up, unlike ObservableForProperty(). Use this method in constructors to set up bindings between properties that also need an initial setup. WhenAny allows you to observe whenever one or more properties on an object have changed, providing an initial value when the Observable is set up, unlike ObservableForProperty(). Use this method in constructors to set up bindings between properties that also need an initial setup. WhenAny allows you to observe whenever one or more properties on an object have changed, providing an initial value when the Observable is set up, unlike ObservableForProperty(). Use this method in constructors to set up bindings between properties that also need an initial setup. WhenAny allows you to observe whenever one or more properties on an object have changed, providing an initial value when the Observable is set up, unlike ObservableForProperty(). Use this method in constructors to set up bindings between properties that also need an initial setup. WhenAny allows you to observe whenever one or more properties on an object have changed, providing an initial value when the Observable is set up, unlike ObservableForProperty(). Use this method in constructors to set up bindings between properties that also need an initial setup. WhenAny allows you to observe whenever one or more properties on an object have changed, providing an initial value when the Observable is set up, unlike ObservableForProperty(). Use this method in constructors to set up bindings between properties that also need an initial setup. WhenAny allows you to observe whenever one or more properties on an object have changed, providing an initial value when the Observable is set up, unlike ObservableForProperty(). Use this method in constructors to set up bindings between properties that also need an initial setup. WhenAny allows you to observe whenever one or more properties on an object have changed, providing an initial value when the Observable is set up, unlike ObservableForProperty(). Use this method in constructors to set up bindings between properties that also need an initial setup. WhenAny allows you to observe whenever one or more properties on an object have changed, providing an initial value when the Observable is set up, unlike ObservableForProperty(). Use this method in constructors to set up bindings between properties that also need an initial setup. WhenAny allows you to observe whenever one or more properties on an object have changed, providing an initial value when the Observable is set up, unlike ObservableForProperty(). Use this method in constructors to set up bindings between properties that also need an initial setup.