02.04.2009

ChildData in Parallel Replicator

Использование Replicator'а бывает очень удобно и нужно. Но есть один очень не удобный момент: доступ к данным внутри дочерних элементов в параллельном репликаторе.
Если использовать последовательный репликатор, то текущий исполняемый экземпляр доступен через свойство репликатора CurrentIndex.
Иначе дело обстоит с параллельным репликатором, где CurrentIndex всегда указывает на один и тот же элемент в списке данных для реплицируемых элементов.
Для решения данной проблемы можно поступить следующим образом:
-определить свой SequenceActivity, содержащий ссылку на данные для экземпляра репликатора. (поле _instanceData)
[Serializable]
public class StoreSequence : SequenceActivity
{
--private object _instanceData = null;

--public object InstanceData
--{
------get { return _instanceData; }
------set { _instanceData = value; }
--}
}
-поместить данный Activity в качестве дочернего элемента в Replicator Activity, а реплицируемые элементы на StoreSequence .
-при выполнение метода ChildInitialized (инициализация дочерних activity) сохранить данные в созданный контейнер
...
private void sendAlertsReplicator_ChildInitialized(object sender, ReplicatorChildEventArgs e)
{
----((StoreSequence)e.Activity).InstanceData = e.InstanceData;
}
...
-для обращения внутри реплицируемых элементов необходимо выполнить операцию приведения типов (Activity)sender , а родительским элементом будет StoreSequence у которого можно получить свойство InstanceData.

2 комментария:

GT rocker комментирует...

кто такой этот репликатор?

_arh комментирует...

кому надо это использовать тот знает :-)