У меня возникла проблема с полем TextBox
в моем проекте.
В настоящее время у меня есть NavigationViewItem
, который SaveButton_ClickAsync
. Он открывает диалог сохранения файла и позволяет пользователям вводить имя файла и сохранять его как файл .txt
или .csv
.
У меня есть глобальная переменная, в которой хранится имя и местоположение файла документа, сохраненного в виде строки. На эту переменную затем ссылаются по всему проекту.
Одним из примеров этого является TextBox
, который отображает FileName
и FilePath
.
У меня есть это для обновления в данный момент при переходе от страницы настроек и обратно на страницу настроек после первого сохранения. Он также обновляется при сохранении документа, а затем сохраняется снова, но не обновляется при первом сохранении без перехода от SettingsPage
ИЛИ к сохранению во второй раз.
Он НЕ обновляется, когда я в данный момент на SettingsPage
, и не сохраняю документ в первый раз. Мне нужно это сделать
Я полагаю, это связано с тем, как Private void GlobalVariables_PropertyChanged
используется в разделе SettingsPage
ниже. Я включил весь соответствующий код, чтобы вы могли видеть, как он работает, и как проходит программа.
Что мне нужно сделать, так это то, что при первом сохранении файла GlobalVariebles_PropertyChanged
ДОЛЖЕН сработать. Я чувствую, что мне нужно автоматически загружать строку в _fileName / _filePath при загрузке программы, тогда это позволит PropertyChanged
определить это как изменение строки. Я, возможно, держусь за соломинку, хотя. Любые мысли / идеи по этому поводу были бы великолепны.
Get Set
в GlobalVariableStorage
- это заполнитель, который позволяет мне видеть, когда класс обнаруживает изменение.
Вот код:
Код сзади
using BS.Data;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Runtime.CompilerServices;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
namespace BS.Content_Pages
public sealed partial class SettingsPage : Page, INotifyPropertyChanged
{
public SettingsPage()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
GlobalVariables.PropertyChanged += GlobalVariables_PropertyChanged;
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
GlobalVariables.PropertyChanged -= GlobalVariables_PropertyChanged;
}
private void GlobalVariables_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
switch (e.PropertyName)
{
case nameof(GlobalVariables.FilePath):
NotifyPropertyChanged(nameof(TextBoxFilePath));
break;
case nameof(GlobalVariables.FileName):
NotifyPropertyChanged(nameof(TextBoxFileName));
break;
}
}
public string TextBoxFilePath => GlobalVariables.FilePath;
public string TextBoxFileName => GlobalVariables.FileName;
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName) =>
PropertyChanged?.Invoke(null, new PropertyChangedEventArgs(propertyName));
}
}
GlobalVariablesStorage
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices;
namespace BS.Data
{
public static class GlobalVariables
{
private static string _filePath;
public static string FilePath
{
get
{
if (_filePath is null)
{
return "Document not saved yet";
}
else
{
return _filePath; }
}
set { _filePath = value; NotifyPropertChanged(); }
}
private static string _fileName;
public static string FileName
{
get
{
if (_fileName is null)
{
return "Document not saved yet";
}
else
{
return _fileName;
}
}
set { _fileName = value; NotifyPropertChanged(); }
}
public static event PropertyChangedEventHandler PropertyChanged;
private static void NotifyPropertChanged([CallerMemberName]string propertyName = " ") =>
PropertyChanged?.Invoke(null, new PropertyChangedEventArgs(propertyName));
}
}