РЕДАКТИРОВАТЬ Имя свойства с ошибкой в примере
Давайте предположим, что у нас есть такие интерфейсы
public interface IBase {}
public interface IItf_1: IBase {}
public interface IItf_2: IBase {}
public interface IItf_3: IBase {}
public interface IInterfaceHolder<T>: IBase, INotifyPropertyChanged {
// Changes to this property caused raise of the PropertyChanged event
bool Checked { get; set; }
T Item { get; }
}
public interface ISomeFunnyInterface: INotifyPropertyChanged {
IEnumerable<IInterfaceHolder<IItf_1>> Collection_1 { get; }
IEnumerable<IInterfaceHolder<IItf_2>> Collection_2 { get; }
IEnumerable<IInterfaceHolder<IItf_3>> Collection_3 { get; }
}
Идея состоит в том, чтобы туннелировать PropertyChanged от каждого свойства Checked к PropertyChaned, созданному из ISomeFunnyInterface, с соответствующим именем свойства (некоторые отличные от «Checked»).
Очевидным решением является обработка каждой отправки PropertyChanged с помощью интерфейса IInterfaceHolder. Но проблема в том, что я пишу обработчик:
private void GenericSelectorSelected_PropertyChanged(object sender, PropertyChangedEventArgs e) {
dynamic el = (dynamic)sender;
// here an exception is thrown, because sender (or more correctly 'el') is
// handled as IBase, and not as IInterfaceHolder
if (el.Checked) {
}
else {
}
}
Как решить эту проблему? Как заставить его работать без необходимости написания отдельных обработчиков для каждого IInterfaceHandler <.>