在WPF中,我正在尝试创建一个输出窗口。它应该像控制台输出,它显示一些函数的活动信息,如输出消息,函数调用的时间等,类似于VS的输出窗格。为此,我想创建一个带有文本块的组合框,然后根据需要更改其文本:
<Windows x:Class="MyProject.MainWindow" ... >
<Grid Margin="0">
<!-- Some other UI member may come here -->
<GroupBox Header="Console" Grid.Column="1" Margin="0,590,0,0" HorizontalAlignment="Stretch" x:Name="ConsoleWindow" IsEnabled="True" VerticalAlignment="Stretch"
>
<TextBlock x:Name="myConsoleWindowTextBlock"/>
</GroupBox>
</Grid>
</Window>
在后面的代码中,我创建了一个更改文本的函数:
public void changeConsoleWindowText(string userProvidedString)
{
myConsoleWindowTextBlock.Text = userProvidedString;
}
现在,我可以通过以下方式更改其他课程中的文字:
MainWindow testConsole = new MainWindow();
testConsole.changeConsoleWindowText("This is a test to change the text.");
这里的问题是,每次我更改文本时,我都需要刷新MainWindow
以查看效果,这根据此处的代码是合理的。但这不是我想要的,也不是有效的。我需要它只需刷新ConsoleWindow
的{{1}}成员即可显示更改后的新文字。此外,我试图逃避任何多线程的方式。经过大量搜索后我无法找到任何解决方案。你对此有什么建议吗?谢谢。
答案 0 :(得分:1)
将ViewModel类的字符串属性绑定到TextBox并填充此属性而不是使用方法。此字符串属性需要具有INotifyPropertyChanged接口。