У меня есть своя техника.
Я извлекаю хеш-код объекта и сохраняю его в Dictionary
с хэш-кодом в качестве ключа и объектом в качестве значения пары.
Затем я присоединяю хэш-код к UriQuery
.
После этого мне нужно только получить хеш-код, который приходит из Uri в целевом представлении, и использовать его для запроса исходного объекта из Dictionary
.
Пример кода:
Класс хранилища параметров:
public class Parameters
{
private static Dictionary<int, object> paramList =
new Dictionary<int, object>();
public static void save(int hash, object value)
{
if (!paramList.ContainsKey(hash))
paramList.Add(hash, value);
}
public static object request(int hash)
{
return ((KeyValuePair<int, object>)paramList.
Where(x => x.Key == hash).FirstOrDefault()).Value;
}
}
Код звонящего:
UriQuery q = null;
Customer customer = new Customer();
q = new UriQuery();
Parameters.save(customer.GetHashCode(), customer);
q.Add("hash", customer.GetHashCode().ToString());
Uri viewUri = new Uri("MyView" + q.ToString(), UriKind.Relative);
regionManager.RequestNavigate(region, viewUri);
Код целевого вида:
public partial class MyView : UserControl, INavigationAware
{
// some hidden code
public void OnNavigatedTo(NavigationContext navigationContext)
{
int hash = int.Parse(navigationContext.Parameters["hash"]);
Customer cust = (Customer)Parameters.request(hash);
}
}
Вот и все.