2016-04-10 3 views
5

Ich verwende Visual Studio 2015 mit Update 1. Ich habe eine neue UWP Windows 10-Anwendung mit 2 leeren Seiten erstellt. Die erste Seite hat eine GridView mit einem itemClick-Ereignis. Das Objekt, das ich an das GridViewItem binde, hat ein Zeichenfolgenfeld "Link", das den Namen der Seite enthält, zu der ich navigieren werde, wenn ich auf dieses GridViewItem klicke.Navigieren zu einer Seite in VS2015 Windows 10 UWP mit einem Parameter

Aber das ist nicht möglich ... da "Link" hier wie ein Typ verwendet wird. Gibt es eine Möglichkeit, es zu übertragen und es zum Laufen zu bringen?

Antwort

1

Zuerst, wenn Sie die ItemClick event verwenden, ist der "Absender" nicht Ihre Menu Klasse, es ist die GridView Steuerung selbst. Daher sollte Ihr Code 10 eine Null-Referenz-Ausnahme erhalten.

Hier kann ich Provider zwei Möglichkeiten, diese Arbeit zu tun, aber alle diese zwei Möglichkeiten, mit dem SelectionChanged event wie folgt aus:

private void gridView_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var link = (gridView.SelectedItem as Menu).Link; 
    Frame.Navigate(link); 
} 

erste, definieren zwei Eigenschaften in Ihrer Menu Klasse wie folgt:

public class Menu 
{ 
    public Type Link { get; set; } 
    public string Name { get; set; } 
} 

Und verwenden Sie die GridView wie folgt aus:

<GridView x:Name="gridView" ItemsSource="{x:Bind menu}" SelectionChanged="gridView_SelectionChanged"> 
    <GridView.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name}" FontSize="25" /> 
     </DataTemplate> 
    </GridView.ItemTemplate> 
</GridView> 

der Code hinter sich fügen Sie Daten zu GridView:

private ObservableCollection<Menu> menu = new ObservableCollection<Menu>(); 

public MainPage() 
{ 
    this.InitializeComponent(); 
} 

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    menu.Clear(); 
    menu.Add(new Menu { Link = typeof(Link1), Name = typeof(Link1).Name }); 
    menu.Add(new Menu { Link = typeof(Link2), Name = typeof(Link2).Name }); 
    menu.Add(new Menu { Link = typeof(Link3), Name = typeof(Link3).Name }); 
} 

zweite, können Sie nur eine Eigenschaft in der Menu Klasse definieren, sondern einen Converter verwenden den Namen jeder Seite angezeigt werden soll.

Menu Klasse:

public class Menu 
{ 
    public Type Link { get; set; } 
} 

der TypeToStringConverter Konverter:

<Page.Resources> 
    <local:TypeToStringConverter x:Key="cvt" /> 
</Page.Resources> 

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <GridView x:Name="gridView" ItemsSource="{x:Bind menu}" SelectionChanged="gridView_SelectionChanged"> 
     <GridView.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Converter={StaticResource cvt} }" FontSize="25" /> 
      </DataTemplate> 
     </GridView.ItemTemplate> 
    </GridView> 
</Grid> 

der Code hinter:

public class TypeToStringConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     if (value == null) 
      return "Error"; 
     var link = (value as Menu).Link; 
     return link.Name; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Und Sie diesen Konverter und die GridView in XAML wie diese verwenden können Daten zu GridView hinzufügen:

private ObservableCollection<Menu> menu = new ObservableCollection<Menu>(); 

public MainPage() 
{ 
    this.InitializeComponent(); 
} 

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    menu.Clear(); 
    menu.Add(new Menu { Link = typeof(Link1) }); 
    menu.Add(new Menu { Link = typeof(Link2) }); 
    menu.Add(new Menu { Link = typeof(Link3) }); 
} 
Verwandte Themen