2016-03-21 20 views
1

私は「マスターフレーム」(CommandBarのみを含む)と、最初はハブにあるいくつかの子フレームを持っています。基本的には、1つのハブ要素を介してクリックされたフレームが変更されると、「OnNavigated ..」UWPボタンの可視性を後ろのコードから変更する

今は見えてはならない(実施例1および2のための)いくつかのボタンを持って、特定のフレームが選択される場合のみ:

enter image description here

私はgetterメソッドとsetterメソッドでそれを試してみた:マスター・フレームコード-方法で

public static Visibility setVisibility 
     { 
      set { Button1.Visibility = value; } 
     } 

と後ろのフレーム1のコードで:

MasterFrame.setVisibility = Visibility.Visible; 

しかし、私は「オブジェクト参照がある...」ボタン1からエラーを取得しています、私はボタンへのアクセスを取得するには、「静的」修飾子を使用する必要があるためフレーム1から。

ボタンにアクセスするにはどうすればよいですか?

コードビハインドで「正しい」アプローチを使用しているのかどうかわかりませんが、これはCRUDアプリケーションではないため、MVVMは役に立ちません。入力してください)

+0

* INOTifyPropertyChanged *を実装し、それらのプロパティにバインドボタンの可視性を実装するいくつかのプロパティを持つクラスを考えることができます。 – Romasz

+1

なぜ、これはCRUDアプリケーションではないので、MVVMは役に立たないと思いますか?両者はお互いに関係がありません。 – CodingGorilla

+0

@ CodeGorilla:これはUWPとMVVMに関する私が見つけた唯一のチュートリアルです:https://blogs.msdn.microsoft.com/johnshews_blog/2015/09/09/a-minimal-mvvm-uwp-app/ – inix42

答えて

2

コードビハインドで「正しい」アプローチを使用しているのかどうかわかりませんが、MVVMは役に立たないようです。これはCRUDアプリケーションではありません( MVVMは、MVVMデザインパターンでは、開発者がアプリケーションロジックをコーディングでき、設計者がUIを作成できるので便利です。 CRUDアプリケーションを開発していなくても、MVVMパターンを引き続き使用できます。

UWPアプリでは、Data Bindingは非常に強力です。この場合、データバインディングをConverterと一緒に使用して問題を解決することができます。

私はイベントのためにデータバインディングを使用し、ButtonAppBarButton秒の可視性を判断するためにConverterを使用するためにここにサンプルを書いた:ここ

public class VisiableOrNot : 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:///View/Page3.xaml")) 
      { 
       return Visibility.Visible; 
      } 
     } 
     return Visibility.Collapsed; 
    } 

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

です:VisiableOrNotコンバータの

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <Grid.Resources> 
     <Converter:VisiableOrNot x:Key="cvt" /> 
     <Converter:NaviButtonShowOrNot x:Key="btncvt" /> 
    </Grid.Resources> 
    <CommandBar> 
     <CommandBar.Content> 
      <Grid> 
       <TextBlock Text="Master-Frame" FontSize="20" Margin="20,10" /> 
      </Grid> 
     </CommandBar.Content> 
     <AppBarButton Icon="Accept" Label="appbarbutton" Visibility="{Binding ElementName=mainPageframe, Path=Content.BaseUri.AbsoluteUri, Converter={StaticResource cvt}}" /> 
     <AppBarButton Icon="Cancel" Label="appbarbutton" Visibility="{Binding ElementName=mainPageframe, Path=Content.BaseUri.AbsoluteUri, Converter={StaticResource cvt}}" /> 
    </CommandBar> 
    <Frame x:Name="mainPageframe" Margin="0,55"> 
     <Hub x:Name="hub" SectionHeaderClick="{x:Bind MainPageViewModel.hub_SectionHeaderClick}"> 
      <HubSection x:Name="image1" Header="Image1" Width="200" IsHeaderInteractive="True"> 
       <DataTemplate> 
        <Grid> 
         <Image Source="Assets/111.png" Stretch="None" /> 
        </Grid> 
       </DataTemplate> 
      </HubSection> 
      <HubSection x:Name="image2" Header="Image2" Width="200" IsHeaderInteractive="True"> 
       <DataTemplate> 
        <Grid> 
         <Image Grid.Row="0" Source="Assets/222.png" Stretch="None" /> 
        </Grid> 
       </DataTemplate> 
      </HubSection> 
      <HubSection x:Name="image3" Header="Image3" Width="200" IsHeaderInteractive="True"> 
       <DataTemplate> 
        <Grid> 
         <Image Source="Assets/333.png" Stretch="None" /> 
        </Grid> 
       </DataTemplate> 
      </HubSection> 
     </Hub> 
    </Frame> 
    <Button Content="Go Back" Click="{x:Bind MainPageViewModel.Button_Click}" Background="PaleGreen" VerticalAlignment="Bottom" Margin="50,20" Visibility="{Binding ElementName=mainPageframe, Path=Content.BaseUri.AbsoluteUri, Converter={StaticResource btncvt}}" /> 
</Grid> 

コードを私のデモのレンダリング画像であるAppBarButtonは、子フレームのコンテンツがPage3である場合にのみ表示されます。メインページ上にあるときに戻る戻るボタンは表示されません。 enter image description here

ここには私のdemoがありますので、ダウンロードして確認できます。

関連する問題