私はちょうどC#の初心者です。私はMSDNブログのINotifyPropertyChanged Event Handler
について読んで、ここで "stackoverflow"を検索しました。しかし、私は自分のコードでそれを実装する方法と、イベントとプロパティをどのように束縛しなければならないのかを本当に理解していません。
CantはINotifyPropertyChangedの実装を理解しています
私はすでにINotifyPropertyChanged
でBindingClass
をしたし、コードは次のとおりです。
namespace Testing.Pages
{
class BindingClass : INotifyPropertyChanged
{
private string _setting;
public event PropertyChangedEventHandler PropertyChanged;
public BindingClass()
{
}
public BindingClass(string value)
{
_setting = value;
}
public string SettingProperty
{
get { return _setting; }
set
{
_setting = value;
// calling OnPropertyChanged whenever the property gets updated
}
}
protected void OnPropertyChanged([CallerMemberName] string _setting = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(_setting));
}
}
}
SettingsPage.xaml
<TextBlock x:Name="PopupText"
Grid.Row="0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="0,0,0,20"
Text="Your theme will be updated next time you start the app."
TextWrapping="Wrap"
Visibility="Collapsed">
<TextBlock.Resources>
<Storyboard x:Name="popup_animate">
<DoubleAnimation Duration="0:0:2"
Storyboard.TargetName="PopupText"
AutoReverse="True"
From="0.0"
To="1.0"
BeginTime="{x:Bind }"
Storyboard.TargetProperty="(TextBlock.Opacity)"
></DoubleAnimation>
</Storyboard>
</TextBlock.Resources>
</TextBlock>
<TextBlock Text="Change Theme?"
Margin="10,10,0,0"></TextBlock>
<RadioButton x:Name="DarkTheme_btn"
Click="ChangeTheme_btn_Click"
Content="Dark Theme"
Margin="10,0,0,0"
GroupName="theme"></RadioButton>
<RadioButton x:Name="LightTheme_btn"
Click="ChangeTheme_btn_Click"
Content="Light Theme"
Margin="10,0,0,0"
GroupName="theme"></RadioButton>
とコードビハインドファイルSettingsPage.xaml.cs
は次のとおりです。
namespace Testing.Pages
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class SettingsPage : Page
{
BindingClass notifyProperty = new BindingClass();
public SettingsPage()
{
this.InitializeComponent();
NavigationCacheMode = NavigationCacheMode.Enabled;
}
private void ChangeTheme_btn_Click(object sender, RoutedEventArgs e)
{
DataContext = notifyProperty;
int notifySettings = 0;
if ((bool)DarkTheme_btn.IsChecked)
{
notifySettings = 2;
AppSettings.saveThemeSettings(notifySettings);
PopupText.Visibility = Visibility.Visible;
popup_animate.Begin();
}
else if ((bool)LightTheme_btn.IsChecked)
{
notifySettings = 1;
AppSettings.saveThemeSettings(notifySettings);
PopupText.Visibility = Visibility.Visible;
popup_animate.Begin();
}
}
}
}
私はすでにLocalSettingsFolder
にアプリの設定を変更するint notifySettings
を使用していますし、アプリ上のすべての時間は、それがApp.xaml
の設定をロードして再起動します。私が設定を変更するたびに、別のclass
の関数を呼び出して、設定を変更します。そして、radiobuttons
をSettingsPage.xaml
に2つ1つクリックすると、animation
が再生されます。これは古い方法です。
Theme Settings
が更新されるたびに、int notifySettings
とPopupText
のアニメーションを再生する必要がないように、これらのイベントをまとめてバインドします。これは私がINotifyPropertyChanged Event
について学ぶ方法です。
int notifySettings
には、int
の値が渡され、それに応じて設定が変更されます。 1 = LightThemeおよび2 = DarkTheme。ここで
はSettings Class
です:
namespace Testing.Pages
{
class AppSettings
{
public static void saveThemeSettings(int value)
{
ApplicationDataContainer themeSettings = ApplicationData.Current.LocalSettings;
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
themeSettings.Values["AppThemeSetting"] = value.ToString();
}
public static string readThemeSettings()
{
ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings;
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
string appSettingsString = "error, nothing found";
if (localSettings.Values.ContainsKey("AppThemeSetting"))
{
appSettingsString = localSettings.Values["AppThemeSetting"]?.ToString();
}
return appSettingsString;
}
public static void removeLocalSettings(string settingValue)
{
ApplicationData.Current.LocalSettings.Values.Remove(settingValue);
}
}
}
任意のあいまいさは私が知っていると私はさらに説明しようとすることができますしてくださいまだある場合。私は誰かが私にこれを助けることを願っています。
更新:
私はダニーBogersによって答えに応じて私のプロジェクトに変更を加えたが、必要なAnimation
が起動しないと私は機能をしても呼び出されていないので、それはあると思います。私はいくつかの変更を加えて自分でやろうとしましたが、実際にはうまくいきませんでしたので、自分のメソッドを使って他の誰かが解決策を見つけるまで変更を行います。
プロパティを更新するたびにOnPropertyChangedを呼び出すと、そのコードを実際に表示する必要がありますか、または実際のコードにそのコメントがありますか? –
私は実際にマイクロソフトのブログからコードを得て、それを少し編集しました。しかし、私はこれらの機能を一緒に実装する方法を知る必要があります。だから私はそれについて学ぶことができます。 – Ahmar