Я не очень знаком с MVVM, поэтому я не уверен, с чего мне начать. Если решение есть, но до сих пор я сделал следующее (с использованием кода):
У меня в основном есть кнопка переключения, если вы отметите ее, она что-то запишет в реестр, а если вы ее снимете, она удалит то же самое из реестра. Я просто добавил события Checked и Unchecked.
Проблема здесь в том, что я хочу сохранить состояние ToggleButton (был ли он отмечен или не отмечен). Я смог сделать это при загрузке формы, сравнив реестр, а затем повернув isChecked в значение true или false, но проблема в том, что если я поверну isChecked в значение true, он вызовет событие 'Checked' и в основном напишет то же самое в реестр очередной раз.
private void MyWindow_Loaded(object sender, RoutedEventArgs e)
{
RegistryKey rk = Registry.CurrentUser.OpenSubKey
("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
if (rk.GetValue("Z") == null)
{
Toggle.IsChecked = false;
}
else
{
Toggle.IsChecked = true;
}
}
private void Toggle_Checked(object sender, RoutedEventArgs e)
{
RegistryKey rkRegistryKey = Registry.CurrentUser.OpenSubKey
("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
rkRegistryKey.SetValue("Z", System.Reflection.Assembly.GetExecutingAssembly().Location);
}
private void Toggle_UnChecked(object sender, RoutedEventArgs e)
{
RegistryKey rkRegistryKey = Registry.CurrentUser.OpenSubKey
("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
rkRegistryKey.DeleteValue("Z", false);
}
Действительно? это не то, что я слышу, как все говорят
По этому поводу ведется много споров .. проверьте это Преимущества и недостатки M-V-VM
99% разработки wpf выполняется с использованием MVVM. Это стандарт де-факто. По уважительным причинам. Если все, что вы делаете, это пишете тривиальное приложение и это все, что вам когда-либо захочется, это не имеет значения, и вы можете делать все, что хотите. Если вы намереваетесь когда-либо заниматься коммерческой разработкой WPF, изучите MVVM и будьте готовы ответить на вопросы MVVM на собеседовании. Если вы хотите сохранить состояние между запусками и у вас нет базы данных, вы можете просто сериализовать объекты на диск. Вот как это работает: gallery.technet.microsoft.com/WPF-Dynamic-Fonts-ad3741ca





Вы можете использовать логическую переменную, чтобы временно "приостановить" обработчики событий:
private bool _handleEvents;
private void MyWindow_Loaded(object sender, RoutedEventArgs e)
{
RegistryKey rk = Registry.CurrentUser.OpenSubKey
("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
_handleEvents = false;
if (rk.GetValue("Z") == null)
{
Toggle.IsChecked = false;
}
else
{
Toggle.IsChecked = true;
}
_handleEvents = true;
}
private void Toggle_Checked(object sender, RoutedEventArgs e)
{
if (!_handleEvents)
return;
RegistryKey rkRegistryKey = Registry.CurrentUser.OpenSubKey
("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
rkRegistryKey.SetValue("Z", System.Reflection.Assembly.GetExecutingAssembly().Location);
}
private void Toggle_UnChecked(object sender, RoutedEventArgs e)
{
if (!_handleEvents)
return;
RegistryKey rkRegistryKey = Registry.CurrentUser.OpenSubKey
("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
rkRegistryKey.DeleteValue("Z", false);
}
Psst, не используйте MVVM :), если вы действительно не собираетесь повторно использовать View-Model в разных проектах!