Предположим, что у нас есть CLR-объекты такого типа:
public class Foo
{
...
public Bar { get; private set; }
}
public class Bar: INotifyPropertyChanged
{
public string Baz { get {...} set {...} }
}
Теперь у меня есть окно с DataContext, привязанным к экземпляру Foo. В этом окне я делаю:
<TextBox Text={Binding Bar.Baz} />
Поскольку Foo не реализует INotifyPropertyChanged, я получу здесь хорошо известную утечку памяти WPF. Есть два решения:
- Реализация INotifyPropertyChange на
- Foo Использовать привязку OneTime
Мне не нравится 1), скажем, мы хотим использовать привязку OneTime.
Но мне нужна только привязка OneTime для доступа к Bar, а мне нужна привязка TwoWay для Baz:
<TextBox DataContext="{Binding Bar, Mode=OneTime}" Text={Binding Baz, Mode=TwoWay} />
Пока все хорошо, но если какое-то другое свойство из TextBox теперь необходимо связать со свойством Foo, все усложняется, потому что DataContext больше не является экземпляром Foo.
Итак, вот вопрос: есть ли способ указать Bindig (в XAML или коде), который привязывает OneTime к родительскому свойству, а TwoWay к дочернему свойству?