I have core functionality encapsulated in ViewModelBase
Now I want to see when PropertyChanged event was raised by ViewModelBase and act on it. For example, when one property was changed on ViewModelBase - I want to change property on my ViewModel
How do I achieve this?
public class MaintainGroupViewModel : BaseViewModel<MEMGroup>
{
public abstract class BaseViewModel<T> : NotificationObject, INavigationAware
where T : Entity
{
The direct way to subscribe to property changes is using
INotifyPropertyChanged
if yourBaseViewModel
implements it:If it doesn't, then it has to be a
DependencyObject
, and your properties have to beDependencyProperties
(which is probably a more complicated way).This article describes how to subscribe for
DependencyProperty
changes.Usually I use register to the
PropertyChanged
event in the class Constructorand my PropertyChanged event handler looks like this:
I am concerned that you're effectively doing a 'manual binding' (bad) for a property in a derived class to a value on the base class (also bad). The whole point of using inheritance is that the derived class can access things in the base class. Use a
protected
modifier to indicate things should only be accessible to derived classes.I would suggest this (potentially) more correct method:
Base class:
Derived class:
Really, subscribing to an event in the base class of the very class you're writing just seems incredibly backwards - what's the point of using inheritance over composition if you're going to compose yourself around yourself? You're literally asking an object to tell itself when something happens. A method call is what you should use for that.
In terms of "when one property was changed on ViewModelBase - I want to change property on my ViewModel", ... they are the same object!