2016-12-09 8 views
0

時にはハンバーガーのないページが必要です。これはIsFullScreenプロパティで行います。さらに、常に利用可能な共通コントロールの可視性を切り替えるために、このIsFullScreenプロパティを使用します。Template10 uwp appsのIsFullScreenプロパティ変更イベント

どのようにしてIsFullScreenプロパティにpropertychangedイベントを付加できますか。あなたの努力のための

おかげで

答えて

1

あなたはSettingsServiceクラスでINotifyPropertyChangedを実装する必要があります。そしてRaisePropertyChanged();(それはBindingのために必要なのですか、あなたが代わりに依存関係プロパティを使用することができます。)このよう

SettingsServiceクラス

public class SettingsService : INotifyPropertyChanged 
{ 
    public static SettingsService Instance { get; } = new SettingsService(); 

    bool _IsFullScreen; 
    public event EventHandler IsFullScreenChanged; 
    public bool IsFullScreen 
    { 
     get { return _IsFullScreen; } 
     set 
     { 
      if (_IsFullScreen != value) 
      { 
       _IsFullScreen = value; 
       // 
       RaisePropertyChanged(); //uses CallerMemberName 
       IsFullScreenChanged?.Invoke(this, EventArgs.Empty); 
      } 
     } 
    } 

    #region INotifyPropertyChanged 

    public event PropertyChangedEventHandler PropertyChanged; 

    public void RaisePropertyChanged([CallerMemberName] string propertyName = null) => 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 

    #endregion 
} 

INとMyViewModelクラスでちょうどプロパティSettingsを追加します。

public class MyViewModel : ViewModelBase 
{ 
    public SettingsService Settings => SettingsService.Instance; 
    // 
} 

そして、XAMLファイルで

Settings.IsFullScreenのようなプロパティパスを書く Bindingパスでは、あなたの答えのために

<Page 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:converter="using:Template10.Converters" 
mc:Ignorable="d"> 

<Page.DataContext> 
    <vm:MyViewModel x:Name="MyViewModel " /> 
</Page.DataContext> 

<Page.Resources> 
    <converter:ValueWhenConverter x:Key="VisibleWhenTrueConverter"> 
     <converter:ValueWhenConverter.When> 
      <x:Boolean>True</x:Boolean> 
     </converter:ValueWhenConverter.When> 
     <converter:ValueWhenConverter.Value> 
      <Visibility>Visible</Visibility> 
     </converter:ValueWhenConverter.Value> 
     <converter:ValueWhenConverter.Otherwise> 
      <Visibility>Collapsed</Visibility> 
     </converter:ValueWhenConverter.Otherwise> 
    </converter:ValueWhenConverter> 
    <converter:ValueWhenConverter x:Key="VisibleWhenFalseConverter"> 
     <converter:ValueWhenConverter.When> 
      <x:Boolean>False</x:Boolean> 
     </converter:ValueWhenConverter.When> 
     <converter:ValueWhenConverter.Value> 
      <Visibility>Visible</Visibility> 
     </converter:ValueWhenConverter.Value> 
     <converter:ValueWhenConverter.Otherwise> 
      <Visibility>Collapsed</Visibility> 
     </converter:ValueWhenConverter.Otherwise> 
    </converter:ValueWhenConverter> 
</Page.Resources> 

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <UserControl Visibility="{Binding Settings.IsFullScreen, Converter={StaticResource VisibleWhenFalseConverter}}"> 
    </UserControl> 
</Grid> 

+0

のような同様のIValueConverterを使用し、視認性への変換BOOLについては

public class MyViewModel : ViewModelBase { public bool IsVisible { get { return m_isVisible; } set { m_isVisible = value; RaisePropertyChanged("IsVisible"); } } public MyViewModel() { //The event when the IsFullScreen property has changed. Messenger.Default.Register<ScreenSizeChangedArgs>(this, args => { IsVisible = !args.IsFullScreen; }); } } 

それはOPの質問に取り組むなぜそれが動作し、どのように説明してください。 – Arashsoft

0

おかげで(私は、ブールからの視認性に変換しValueWhenConverterを使用しました)。この問題を以下のように解決しました。私たちのSettingsServiceクラスはTemplate10 uwp extensionの一部です。データバインディングの場合は、MVVM Lightツールキットを使用します。私たちは、IsFullScreenプロパティが変更されたScreenSizeChangedArgs

public class ScreenSizeChangedArgs : MessageBase 
{ 
    public bool IsFullScreen 
    { 
    get; set; 
    } 
    public ScreenSizeChangedArgs(bool isFullScreen) 
    { 
    IsFullScreen = isFullScreen; 
    } 
} 

メッセージを放送します。関連するビューモデルで

public class SettingsService 
{ 
    public static SettingsService Instance { get; } = new SettingsService(); 
    public bool IsFullScreen 
    { 
    get 
    { 
     return m_settingsHelper.Read<bool>(nameof(IsFullScreen), false); 
    } 
    set 
    { 
     m_settingsHelper.Write(nameof(IsFullScreen), value); 
     Views.Shell.HamburgerMenu.IsFullScreen = value; 
     Messenger.Default.Send(new ScreenSizeChangedArgs(value)); 
    } 
    } 
} 

は、我々はそのScreenSizeChangedArgsメッセージを登録し、新しいIsFullScreen値を扱います。私たちはその http://blogs.u2u.be/diederik/post/2011/11/14/null.aspx

関連する問題