TextBox не обновляется при изменении переменной - PullRequest
0 голосов
/ 07 сентября 2018

У меня возникла проблема с полем 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));

    }
}

1 Ответ

0 голосов
/ 07 сентября 2018

Это ужасно «хакерское» решение, но то, что я сейчас сделал, это в случаях SettingsPage, сделал Frame.Naviate, чтобы обновить страницу. Оно работает. Это брутто. Но это работает. Это работает только когда вы находитесь на странице настроек и сохраняете файл

SettingsPage (PropertyChanged case)

private void GlobalVariables_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            switch (e.PropertyName)
            {
                case nameof(GlobalVariables.FilePath):
                    NotifyPropertyChanged(nameof(TextBoxFilePath));
                    Frame.Navigate(this.GetType());
                    break;
                case nameof(GlobalVariables.FileName):
                    NotifyPropertyChanged(nameof(TextBoxFileName));
                    Frame.Navigate(this.GetType());
                    break;
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...