繁体   English   中英

如何从其他窗口更新WPF列表框的内容

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM