Информируйте интерфейс об изменениях кода в Avalonia WPF

#c# #wpf #avalonia

Вопрос:

Я действительно не могу придумать логического решения этой проблемы. Я действительно не могу вернуть значение интерфейсу, все происходит на серверной части, и мне нужно информировать интерфейс об изменениях, чтобы правильно отображать данные.

Давайте рассмотрим этот простой базовый класс.

 public class TestClass
{
   public string Text {get;set;} = string.Empty;

   private void SetTimer()
   {
      Text = "Starting count";
      Timer timer = new Timer
      {
         Interval = 10000
      };
      timer.Enabled = true;
      timer.Elapsed  = OnTimerEvent;           
   }

      private void OnTimerEvent(Object source, System.Timers.ElapsedEventArgs e)
      {
         Text = "Count finished";
      }
}
 

Я собираюсь пропустить AXAML и просто показать модель представления.

 public class NewWindowViewModel : ReactiveObject
    {
        private string currentText = string.Empty;
        public string CurrentText
        {
            get => currentText;
            set => this.RaiseAndSetIfChanged(ref currentText, value);
        }
        public TestClass TestClass { get; set; } = new TestClass();
    }
 

Таймер запускается здесь.

 private void InitializeComponent()
        {
            AvaloniaXamlLoader.Load(this);

            _viewModel.TestClass.SetTimer();
        }
 

И все в коде работает нормально, текст меняется через 10 секунд, но, очевидно, интерфейс ни о чем не имеет представления.

Перемещение логики в модель просмотра, вероятно, устранит проблему, но законно ли это в соответствии с шаблоном MVVM? Я почти уверен, что нет.

Резюме на случай, если все еще не ясно, чего я хочу — как Text и в TestClass изменениях, основанных на таймере, интерфейс также должен отображать этот текст ( CurrentText ).

Комментарии:

1. Вы можете передать ссылку на модель представления в модель или подписаться на событие из модели в модели представления или di в очереди или передать делегат как действие. Или вмешиваться в слабые события. Модель делает так мало, что, по-видимому, это не ваша конечная цель.