Во-первых, я уточняю, что DetailPagePage
в вашем образце соответствует DetailPage
в вашем коде выше.
Причина, по которой переменная stuff
(mylink
в приведенном выше коде) является нулевой, заключается в том, что вы создаете новый объект класса DetailPagePage
, который не является тем же объектом DetailPagePage
, к которому вы переходили при нажатии GridView. вещь. Когда вы создаете новый объект DetailPagePage
, этому новому DetailPagePage
объекту pageid
не присваивается значение, поэтому он равен нулю.
Вы можете изменить свойство pageid
на статическое свойство класса DetailPagePage
, затем вы можете получить доступ к тому же pageid
в App.xaml.cs,
В DetailPagePage
вам просто нужно изменить pageid
на статический,
public static string pageid;
Затем, в вашем OnActivated
методе App.xaml.cs, так как uriArgs.Uri.Host
делает строчные буквы Title
, при сравнении с pageid вам нужно вызвать метод ToLower()
. Таким образом, метод OnActivated
будет выглядеть так:
protected override async void OnActivated(IActivatedEventArgs args)
{
await ActivationService.ActivateAsync(args);
if (args.Kind == ActivationKind.Protocol)
{
var uriArgs = args as ProtocolActivatedEventArgs;
if (uriArgs != null)
{
//DetailPagePage detailpage = new DetailPagePage();
var stuff = DetailPagePage.pageid;
if (uriArgs.Uri.Host == stuff.ToLower())
{
NavigationService.Navigate(typeof(DetailPagePage), uriArgs);
}
}
Window.Current.Activate();
}
}
После этого вам также нужно изменить параметр навигации uriArgs
и метод DetailPagePage
*1033*, поскольку uriArgs
не может быть преобразован в MyModel
, возможно, вам придется использовать данные параметров навигации для создания объекта MyModel
с такой же информацией для их отображения.
--- Обновление ---
вам может понадобиться использовать данные параметров навигации для создания объекта MyModel
с такой же информацией, чтобы отобразить их.
То есть, вы можете создать новый объект MyModel
, который имеет то же значение свойства, что и объект MyModel
, который вы щелкнули в методе OnActivated
, а затем передать этот объект в метод Navigate
, поэтому метод OnActivated
будет таким:
protected override async void OnActivated(IActivatedEventArgs args)
{
await ActivationService.ActivateAsync(args);
if (args.Kind == ActivationKind.Protocol)
{
var uriArgs = args as ProtocolActivatedEventArgs;
if (uriArgs != null)
{
//DetailPagePage detailpage = new DetailPagePage();
var stuff = DetailPagePage.pageid;
MyModel parameter = null;
if (uriArgs.Uri.Host == stuff.ToLower())
{
switch (stuff)
{
case "Title1":
parameter = new MyModel
{
Title = "Title1",
Subtitle = "My Subtitle 1",
Description = "My Description 1 goes here."
};
break;
case "Title2":
parameter = new MyModel
{
Title = "Title2",
Subtitle = "My Subtitle 2",
Description = "My Description 2 goes here."
};
break;
//Some other case
}
NavigationService.Navigate(typeof(DetailPagePage), parameter);
}
}
Window.Current.Activate();
}
}