【发布时间】:2015-05-14 13:34:02
【问题描述】:
我有两个窗口:主窗口、日志窗口。当主窗口中发生某些操作(例如单击按钮)时,如何更新日志窗口中的列表框?
以下是日志窗口中列表框的代码:
<ListBox x:Name="DebugLogLb" BorderBrush="{x:Null}">
<TextBlock x:Name="DebugLogTb" Text="{Binding LogText}" Background="{x:Null}" />
</ListBox>
单击主窗口中的按钮时,它将更新列表框。我尝试使用下面的代码,但它不起作用。
private void Btn1_Click(object sender, RoutedEventArgs e)
{
var log = new LogWindow();
log.DebugLogLb.Items.Add(new { LogText = "Button 1 is clicked" });
}
如果我将所有内容放在同一个窗口中,我可以更新列表框,但我在两个窗口中没有这样做。
我的预期输出如下:
即使两个窗口都打开了,当点击主窗口中的按钮时,它也会直接在日志窗口中更新。
感谢任何高级帮助。
【问题讨论】:
-
使用一些事件聚合器框架,如 Calibur.Micro caliburnmicro.codeplex.com
-
每次点击按钮时是否创建一个新窗口?
-
@Ywah
log.DebugLogLb.Items的类型是什么?你如何将你的列表框绑定到它(如果你绑定它)?或者您是否将所有这些项目的文本聚合到一个文本属性中?很难说这段代码出了什么问题 - 它没有显示太多。 -
嗨@user2697817,不,我只想创建一次窗口,如果我没有打开日志窗口,则必须在日志中更新主窗口中的事件(按钮点击)窗口。
-
嗨@Eugene Podskal,我使用文本块将文本绑定到列表框。还有其他更好的方法来绑定文本吗?我不会将所有这些事件(按钮点击)聚合到一个属性中。其实我想要的是当按钮1被点击时,“按钮1被点击”将显示在日志窗口中,接下来如果按钮3被点击,“按钮3被点击”将显示在第一个下方。