我需要一点帮助。我在Master-Details MVVM草图上有40个按钮。如您所知,我从MainPage中点击一个按钮,它在DetailsPage上显示数据。 我需要做的是点击任何按钮(1,2,3 ... 40)并将其名称(Semana 1,2,...,40)作为详细信息页面的标题发送。 我可以通过命名每个按钮来实现这一目标
<StackPanel x:Name="Semanas1a5">
<Button x:Name="bs1" Content="Semana 1" Click="Button_Click_1"/>
<Button x:Name="bs2" Content="Semana 2" Click="Button_Click_2"/>
<Button x:Name="bs3" Content="Semana 3" Click="Button_Click_3"/>
<Button x:Name="bs4" Content="Semana 4" Click="Button_Click_4"/>
<Button x:Name="bs5" Content="Semana 5" Click="Button_Click_5"/>
</StackPanel>
然后在导航命令中将其名称作为参数传递。
private void Button_Click_1(object sender, RoutedEventArgs e)
{
NavigationService.Navigate(new Uri("/DataBoundApp1;component/MainPage.xaml?hdr=" + bs1.Content, UriKind.Relative));
}
但是我认为必须通过INotifyPropertyChanged或其他任何方式更明智地做到这一点,而不是为40中的每一个写一个名字。 有人有建议吗? 谢谢!
答案 0 :(得分:4)
不是为每个按钮添加Click
事件,为什么不让它们共享同一个事件呢?
<StackPanel Button.Click="OnButtonClick">
<Button Content="Semana 1"/>
<Button Content="Semana 2"/>
<Button Content="Semana 3"/>
<Button Content="Semana 4"/>
<Button Content="Semana 5"/>
</StackPanel>
然后,您可以使用RoutedEventArgs
接收OriginalSource
,从中可以获得Content
属性!
private void OnButtonClick(object sender, RoutedEventArgs e)
{
Button clickedButton = e.OriginalSource as Button;
if (clickedButton != null)
NavigationService.Navigate(new Uri("/DataBoundApp1;component/MainPage.xaml?hdr=" + clickedButton.Content, UriKind.Relative));
}