0

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

AppBarButton 从数据库中删除一个对象,删除它使用在选择对象时传递给页面的对象的 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。

这是 CommandBar 中的 XAMLMainPage.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>

AppBarButtonDeleteSystem出现在CommandBar 先前所在位置的框架navigationView上。DetailsPage.xaml为此,我使用 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.xamllistViewItem当我从 a中选择 a 时打开listView,我在 DetailsPage 中传递项目的 ID,但现在我必须将 ID 传递给 MainPage CommandBar。

4

1 回答 1

0

如果你想在整个应用视图的底部显示一个命令栏,你可以把它放到<Page.BottomAppBar>. 这样,即使您导航到DetailsPage框架内,CommandBar也会显示在页面底部。

因此,在详细信息页面上,您将执行以下操作:

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

作为替代方案,您可以在您的方法中创建一个MainPage返回AppBarButton自身的方法:

public AppBarButton GetDeleteButton()
{
    return DeleteSystem;
}

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

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

然后,您可以在以下情况下附加您需要的OnNavigatedTo事件DetailsPage

button.Click += DeleteSystem_Click;

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

button.Click -= DeleteSystem_Click;
于 2018-02-03T14:12:00.840 回答