सबसे पहले, जब आप ItemClick event का उपयोग करते हैं, तो "प्रेषक" आपकी Menu
कक्षा नहीं है, यह GridView
नियंत्रण स्वयं है। तो आपका कोड var link = (sender as Menu).Link;
एक शून्य संदर्भ अपवाद प्राप्त करना चाहिए।
यहाँ
मैं प्रदाता इस कार्य को करने के दो तरीके हैं, लेकिन इन दो तरीकों में से सभी SelectionChanged event इस तरह का प्रयोग कर रहे:
private void gridView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var link = (gridView.SelectedItem as Menu).Link;
Frame.Navigate(link);
}
पहले एक, इस तरह से अपनी Menu
कक्षा में दो गुणों को परिभाषित:
public class Menu
{
public Type Link { get; set; }
public string Name { get; set; }
}
और GridView
इस तरह का उपयोग करें:
<GridView x:Name="gridView" ItemsSource="{x:Bind menu}" SelectionChanged="gridView_SelectionChanged">
<GridView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" FontSize="25" />
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
कोड के पीछे 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 });
}
दूसरा एक, तो आप सिर्फ Menu
वर्ग में एक प्रॉपर्टी परिभाषित कर सकते हैं, लेकिन प्रत्येक पृष्ठ का नाम प्रदर्शित करने के लिए एक कनवर्टर का उपयोग करें।
Menu
वर्ग:
public class Menu
{
public Type Link { get; set; }
}
TypeToStringConverter
कनवर्टर:
<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>
के पीछे कोड:
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();
}
}
और आप इस कनवर्टर और इस तरह XAML में GridView
उपयोग कर सकते हैं 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) });
menu.Add(new Menu { Link = typeof(Link2) });
menu.Add(new Menu { Link = typeof(Link3) });
}