Создание слабой подписки на iobsibable

То, что я хочу сделать, это убедиться, что если только ссылка на моего наблюдателя - наблюдаемая, она получает сборки мусора и останавливает получение сообщений.

Скажем, у меня есть контроль со списком в нем называется сообщениями, и этот код позади:

//Short lived display of messages (only while the user's viewing incoming messages)
public partial class MessageDisplay : UserControl
{
    public MessageDisplay()
    {
        InitializeComponent();
        MySource.IncomingMessages.Subscribe(m => Messages.Items.Add(m));
    }
}

, который подключается к данному источнику:

//Long lived location for message store
static class MySource
{
    public readonly static IObservable<string> IncomingMessages = new ReplaySubject<string>;
}

Что я не хочу, это иметь возможность хранения отображения сообщения в памяти долго после того, как он больше не виден. В идеале я бы хотел немного расширения, поэтому я могу написать:

MySource.IncomingMessages.ToWeakObservable().Subscribe(m => Messages.Items.Add(m));

Я также не хочу положиться на то, что MessageSplay - это контроль пользователя, так как я позже хочу пойти на настройку MVVM с MessagedisPlayViewModel, который не будет быть контролем пользователя.

21
задан ForbesLindesay 6 September 2011 в 15:31
поделиться