我有一个从服务器接收消息的WPF应用程序。 我在后台工作者中侦听消息,如果有新消息到达,我会调用一个新事件。
在我的ServerMessage.xaml中,我有一个绑定到ViewModel中属性的TextBox。
<TextBox IsReadOnly="True" VerticalScrollBarVisibility="Visible" Text="{Binding ServerMessages}" />
在我的ServerMessage.xaml.cs的代码隐藏中,我听某人调用服务器消息事件。
public void serverMessage(object sender, ServerMessageEventArgs e)
{
viewModel.ServerMessages += e.ServerMessage + "\r\n";
}
由于某些情况,我不得不切换到RichTextBox(主要是因为文本颜色和图像不同)。 遗憾的是,我无法将任何内容绑定到RichTextBox。我尝试了一些可用的扩展程序来绑定,但它们没有用。
为了让它工作,我在事件中使用了RichTextBox.Dispatcher。它看起来像这样:
RichTextBox.Dispatcher.BeginInvoke(
System.Windows.Threading.DispatcherPriority.Normal,
new Action(() =>
{
TextPointer caretPos = ChatTextBox.CaretPosition.DocumentEnd;
new InlineUIContainer(new TextBlock() { Text = e.ServerMessage }, caretPos);
RichTextBox.AppendText("\u2028");
RichTextBox.ScrollToEnd();
}
));
是否有可能摆脱Dispatcher并恢复绑定?
如果我使用绑定或者Dispatcher也可以获得一些东西吗?