時にはハンバーガーのないページが必要です。これはIsFullScreenプロパティで行います。さらに、常に利用可能な共通コントロールの可視性を切り替えるために、このIsFullScreenプロパティを使用します。Template10 uwp appsのIsFullScreenプロパティ変更イベント
どのようにしてIsFullScreenプロパティにpropertychangedイベントを付加できますか。あなたの努力のための
おかげで
時にはハンバーガーのないページが必要です。これはIsFullScreenプロパティで行います。さらに、常に利用可能な共通コントロールの可視性を切り替えるために、このIsFullScreenプロパティを使用します。Template10 uwp appsのIsFullScreenプロパティ変更イベント
どのようにしてIsFullScreenプロパティにpropertychangedイベントを付加できますか。あなたの努力のための
おかげで
あなたは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>
おかげで(私は、ブールからの視認性に変換し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
のような同様のIValueConverterを使用し、視認性への変換BOOLについては
それはOPの質問に取り組むなぜそれが動作し、どのように説明してください。 – Arashsoft