Сообщение в вывод (C # => TextBox) - PullRequest
       15

Сообщение в вывод (C # => TextBox)

0 голосов
/ 25 февраля 2019

У меня есть TextBox:

 <TextBox  DockPanel.Dock="Bottom"               
           FontFamily="Consolas"
           Text="{Binding Path=Output}"
           VerticalScrollBarVisibility="Visible"
           HorizontalScrollBarVisibility="Auto"
           AcceptsReturn="True"
           AcceptsTab="True" /> 

Внутри этого TextBox я хочу отправить / добавить сообщение:

public string Output { get; set; }
public void WriteToOutput(string message)
{
 Output += DateTime.Now.ToString("dd.MM HH:mm:ss") + " " + message + Environment.NewLine;
}     

public void LoadExcelFile()
{
  WriteToOutput("Start....")
  //SOME CODE
  WriteToOutput("End....")
}

Вывод должен выглядеть следующим образом:

Start...
End...

Но текст, который не отображается в TextBox.В чем причина?

Обновление: мой MainViewModel.cs:

[AddINotifyPropertyChangedInterface]
public class MainViewModel
{
....
}

Я использую PropertyChanged.Fody

1 Ответ

0 голосов
/ 25 февраля 2019

Вам не хватает реализации INotifyPropertyChanged.

Рабочий пример:

using System.ComponentModel;

public partial class MainWindow : Window, INotifyPropertyChanged
{
    private string output;
    public string Output
    {
        get { return output; }
        set
        {
            output = value;
            OnPropertyChanged(); // notify the GUI that something has changed
        }
    }

    public MainWindow()
    {
        this.DataContext = this;
        InitializeComponent();
        this.Loaded += MainWindow_Loaded;
    }

    private void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        Output = "Hallo";
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
    {
        if (PropertyChanged != null) {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName: propertyName));
        }
    }
}

Код XAML будет выглядеть следующим образом:

<TextBox Text="{Binding Output}"/>

Как вы можете видеть, всякий раз, когда Output свойство изменяется, будет вызвано событие PropertyChanged.Каждый элемент GUI, связанный с этим свойством, будет знать, что что-то изменилось.

Примечание: [CallerMemberName] автоматически получает имя свойства, с которым был вызван метод.Если вы не хотите его использовать, удалите его.Вы должны изменить OnPropertyChanged вызов на OnPropertyChanged("Output");, однако.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...