Извините, я не мог придумать лучшего названия. Это вопрос, состоящий из двух частей, который имеет смысл только вместе.
Скажем, у меня есть такой конструктор
public Fact(INotifyPropertyChanged observable, Func<bool> predicate)
{
this.predicate = predicate;
observable.PropertyChanged += (sender, args) =>
PropertyChanged(this, new PropertyChangedEventArgs("Value"));
}
и вот как это используется
new Fact(Model.AllowEditing, () => Model.AllowEditing);
, где AllowEditing является типом INotifyPropertyChanged
Я хотел бы изменить конструктор на
public Fact(Expression<Func<bool>> expression)
Так можно назвать вот так
new Fact(() => Model.AllowEditing);
Вопрос в том, как разобрать это выражение, чтобы «заметить» из дерева выражений, а затем подписаться на его событие?
Приведенный выше код не мой, он взят из недавнего примера из Ayende, вот как полный исходный код, если кто-то захочет взглянуть на то, как используется класс Fact *