[英]How to update the content of wpf listbox from different window
我有两个窗口:主窗口,日志窗口。 当在主窗口中发生某些动作(例如,单击按钮)时,如何更新日志窗口中的列表框?
以下是“日志”窗口中列表框的代码:
<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" });
}
如果将所有内容都放在同一个窗口中,则可以更新列表框,但是我无法在两个窗口中进行更新。
我的预期输出将是:
即使两个窗口都打开,单击主窗口中的按钮时,它也会直接在日志窗口中更新。
感谢您对高级的任何帮助。
在没有看到更多代码的情况下很难分辨出哪里出了问题。 这是一个有效的示例。 它在MainWindow
ctor中创建一个新的LogWindow
并设置DataContext。 单击该按钮后,处理程序调用将显示在窗口上。 ListBox的itemssource属性绑定到字符串的ObservableCollection
。 因此,所有添加/删除操作都会在UI上自动更新。
LogWindows xaml
<Window x:Class="WpfApplication7.LogWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="LogWindow" Height="300" Width="300">
<Grid>
<ListBox x:Name="DebugLogLb" BorderBrush="{x:Null}" ItemsSource="{Binding LogText}" />
</Grid>
MainWindow的代码隐藏
public partial class MainWindow : Window
{
LogWindow _logWindow;
public MainWindow()
{
InitializeComponent();
LogText = new ObservableCollection<string>();
_logWindow = new LogWindow();
_logWindow.DataContext = this;
_logWindow.Closed += _logWindow_Closed;
}
private void _logWindow_Closed(object sender, EventArgs e)
{
_logWindow = new LogWindow();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
_logWindow.Show();
LogText.Add("Button1 Clicked");
}
public ObservableCollection<string> LogText { get; set; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.