将命令栏按钮单击事件从框架移出到 MainPage UWP

Move Command Bar Buttons Click Events from frame out to MainPage UWP

我必须将 CommandBar 从加载到 MainPage 的框架中的页面移动,其中存在 NavigationView。当我加载 CommandBar 所在的页面时,我实现了 AppBarButton 的可见性。如何引用传递给页面的参数,以便在现在位于 mainPage 中的 AppBarButton 中使用?

AppBarButton 从数据库中删除一个对象,删除它使用在 selected 对象时传递给页面的对象 ID。

我正在考虑使用 OnNavigatedTo 方法,但我没有加载 MainPAge,因为当我必须传递参数时它已经存在

这是 AppBarButton 所在页面的代码

public sealed partial class DetailsPage : Page
{
   DatabaseHelperClass Db_Helper = new DatabaseHelperClass();
   FFSystems currentSystem = new FFSystems();

   private void DeleteSystem_Click(object sender, RoutedEventArgs e)
   {
       Db_Helper.DeleteFFSystem(currentSystem.ID);//Delete selected DB contact Id. 
       Frame.Navigate(typeof(Home));
   }
}

我必须将 DeleteSystem_Click 事件移动到当我从 navigationView 主页移动到此页面时出现的 MainPage AppBarButton。

这是MainPage.xaml

中CommandBar的XAML
<Grid.Resources>
      <Converter:VisibleOrNotInfoSystem x:Key="cvtDetails" />
</Grid.Resources>
<NavigationView x:Name="navView">
       ...
    </NavigationView>
    <CommandBar DefaultLabelPosition="Right" 
                Grid.Row="0" 
                Style="{ThemeResource CommandBarRevealStyle}" 
                Background="Transparent" 
                Margin="0,30">
         <CommandBar.SecondaryCommands>
              <AppBarButton x:Name="DeleteSystem" 
                            Click="DeleteSystem_Click"
                            Label="Elimina Sistema" 
                            Visibility="{Binding ElementName=ContentFrame, Path=Content.BaseUri.AbsoluteUri, Converter={StaticResource cvtDetails}}"/>
          </CommandBar.SecondaryCommands>
    </CommandBar>

AppBarButton DeleteSystemnavigationView 的框架位于 DetailsPage.xaml 之前 CommandBar 所在的位置时出现。 为此,我使用 IValueConverter:

public class VisibleOrNotInfoSystem : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        Uri uri = new Uri(value.ToString());
        if (uri != null)
        {
            if (uri.Equals("ms-appx:///Views/DetailsPage.xaml"))
            {
                return Visibility.Visible;
            }
         }
         return Visibility.Collapsed;
     }

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

}

DetailsPage.xaml opens when i select a listViewItem from a listView, 我在 DetailsPage 中传递了项目的 ID,但现在我必须传递 ID到 MainPage 命令栏。

如果要在整个应用程序视图的底部显示命令栏,可以将其放入<Page.BottomAppBar>。这样,即使您在一个框架内导航到 DetailsPageCommandBar 也会显示在页面底部。

所以在详细信息页面上你会这样做:

<Page.BottomAppBar>
    <CommandBar ... />
</Page.BottomAppBar>

作为替代方案,您可以在 MainPage 中创建一个方法,该方法将 return AppBarButton 本身:

public AppBarButton GetDeleteButton()
{
    return DeleteSystem;
}

现在您可以从 DetailsPage 代码访问主页:

var rootFrame = Window.Current.Content as Frame;
var mainPage = rootFrame.Content as MainPage;
var button = mainPage.GetDeleteButton();

然后您可以在 DetailsPage:

OnNavigatedTo 事件中附加您需要的事件
button.Click += DeleteSystem_Click;

当然不要忘记在 OnNavigatedFrom 事件中分离事件:

button.Click -= DeleteSystem_Click;