При передачи динамических string-значений через свойство между классами теряется значение С#
Глаз замылен, рассудок затуманен - нужна помощь извне... В wpf-проекте, написанного через MVVM мне необходимо передать строку из класса MainViewModel в окно MainView. При передачи статической строки, всё отрабатывает корректно - и значение приходит в MainView, затем помещается в textblock и выводится в окне, но с динамикой, где изначально (при запуске программы) приходит null, значение не передается в последствии. Что я делаю? Открываю OpenFileDialog и выбираю там файл, его короткое имя помещаю в строку, затем передаю в MainView, но приходит null. Если не передавать строку в MainView, а сразу вывести в MessageBox - значение верное. Нуждаюсь в вашей помощи.
public class MainViewModel : BaseViewModel
{
private string temp = "some file";
public string GetTemp => temp;
public MainViewModel()
{
}
#region ОбластьCurrentOpenedFile
//название файла, открытого кнопкой "Select parser"
private string shortFilename;
public string GetShortFilename
{
set
{
if(shortFilename!=value)
{
shortFilename = value;
RaisePropertyChanged("shortFilename");
}
}
get
{
return shortFilename;
}
}
#endregion
//Рабочий код
#region FindFile
private ICommand findFile;
public ICommand FindFileCommand
{
get
{
return findFile ?? (findFile = new RelayCommand(find_execute));
}
}
private void find_execute(object parameter)
{
var filename = new DialogService().ShowOpenFileDialog();
if (string.IsNullOrEmpty(filename))
{
return;
}
//запись в поле для отображения CurrentOpenedFile
shortFilename = filename;
char slash = '\\';
int lastIndexOf = shortFilename.LastIndexOf(slash) + 1;
string result = shortFilename.Substring(lastIndexOf);
shortFilename = string.Empty;
shortFilename = "Current file: " + result;
}
#endregion
Класс, где реализован INPC
public class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged([CallerMemberName] string property = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
}
}
MainView
public partial class MainView : Window
{
MainViewModel mvm;
public string GetSomeInfo
{
get => mvm.GetShortFilename;
}
public MainView()
{
InitializeComponent();
mvm = new MainViewModel();
//help fucntions
StartClock();
}
#region AllForClock
public void StartClock()
{
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += timer_Tick;
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
tbClock.Text = DateTime.Now.ToLongTimeString();
tbCurrentFileInfo.Text = "Current file: " + GetSomeInfo;
}
#endregion
}