Как обновить свойство привязки WPF из другого класса?
Есть вот такое свойство для MainWindow
internal class MainWindowViewModel : ViewModel
{
#region Статус состояния
private string _Status;
/// <summary>
/// состояние программы
/// </summary>
public string Status
{
get => _Status;
set=>Set(ref _Status, value);
}
#endregion
}
которое привязано к textbox
<TextBlock x:Name="statusTxt" VerticalAlignment="Top" HorizontalAlignment="Left" Width="630" Height="50" Text="{Binding Status}" />
Собственно структура
и сам класс viewmodel
internal abstract class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public virtual void OnPropertyChanged([CallerMemberName] string PropertyName=null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
}
protected virtual bool Set<T>(ref T field, T value, [CallerMemberName] string PropertyName = null)
{
if(Equals(field, value)) return false;
field = value;
OnPropertyChanged(PropertyName);
return true;
}
}
Как я могу поменять значение свойства из класса никак не связанного с mainwindow?
В MainWindowViewModel создал следующую функцию
public void sta(MainWindowViewModel mv,string ss)
{
mv._Status= ss;
}
и вызываю ее из другого класса
MainWindowViewModel mwvm = new MainWindowViewModel();
mwvm.sta(mwvm, "new status");
Ответы (1 шт):
Автор решения: alex6327
→ Ссылка
Сделано как учит Павел Ш. на Ютубе))) Я тоже так делаю). Отталкиваетесь от того, что у вас должен быть один экземпляр VM. Поэтому либо реализовать паттерн singletone, и обращаться из любого места к классу VM и его свойствам. Либо реализовать инверсию управления, внедрение зависимостей и из DI контейнера получать экземпляр VM и с ним работать.
