Я создаю небольшое приложение wpf на C #. Когда на кнопку нажимают третью
Функция party dll создает древовидный объект. Этот объект связан
к дереву. Это работает нормально, но занимает немного времени для загрузки. Как
Функция dll создает объект, который выводит информацию о прогрессе в
приставка. Я хочу перенаправить это в TextBlock, чтобы пользователь
получает видеть сообщения о прогрессе.
Мой окно ctor выглядит так:
InitializeComponent();
StringRedir s = new StringRedir(ref ProgressTextBlock);
Console.SetOut(s);
Console.SetError(s);
this.DataContext = s;
xaml:
<code><</code>TextBlock Text="{Binding Path=Text}" Width="244"
x:Name="ProgressTextBlock" TextWrapping="Wrap" />
<code><</code>TreeView >...<code><</code>/TreeView>
Класс StringRedir показан ниже. Проблема в TextBlock для
по какой-то причине не обновляется с сообщениями, пока TreeView
загружается. Пошагово я вижу, что свойство Text обновляется
но TextBlock не обновляется. Я добавил MessageBox.Show
() в точке, где текст обновляется, и это, кажется, вызывает
окно, чтобы обновить каждый раз, и я могу видеть каждое сообщение. Так что я
думаю, мне нужен какой-то способ явно обновить экран ... но это
не имеет смысла, я думал, что привязка данных приведет к визуальному
обновить, когда свойство изменилось. Что мне здесь не хватает? Как я
заставить его обновить? Любой совет приветствуется!
public class StringRedir : StringWriter , INotifyPropertyChanged
{
private string text;
private TextBlock local;
public string Text {
get{ return text;}
set{
text = text + value;
OnPropertyChanged("Text");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
public StringRedir(ref TextBlock t)
{
local = t;
Text = "";
}
public override void WriteLine(string x)
{
Text = x +"\n";
//MessageBox.Show("hello");
}
}