Смешивание OneTime и TwoWay - PullRequest
       17

Смешивание OneTime и TwoWay

1 голос
/ 05 марта 2010

Предположим, что у нас есть 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. Есть два решения:

  1. Реализация INotifyPropertyChange на
  2. 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 к дочернему свойству?

1 Ответ

0 голосов
/ 05 марта 2010

Краткий ответ - в XAML, вероятно, нет (по крайней мере, без написания собственного расширения разметки), в коде, конечно, но он не будет вам полезен.Поскольку ваши объекты визуально не связаны (у Foo есть Bar, но в XAML это невозможно узнать), вы, по сути, просто жестко закодировалие привязку, как вделают это сейчас в XAML.

Почему вы против реализации INotifyPropertyChanged на Foo?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...