2015-05-14 91 views
0

我有兩個窗口:主窗口,日誌窗口。在主窗口中發生某些操作時(例如單擊按鈕),如何更新日誌窗口中的列表框?如何從不同窗口更新wpf列表框的內容

下面是登錄窗口的列表框代碼:

<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" }); 
} 

我可以,如果我把一切都放在同一個窗口更新列表框,但我失敗有兩個窗口這樣做。

我的預期產出將是這樣的: enter image description here

即使兩個窗口被打開,在主窗口的按鈕被點擊時,它會直接在登錄窗口中更新爲好。

感謝您的任何幫助先進的。

+1

使用一些像Calibur.Micro http://caliburnmicro.codeplex.com/ –

+0

事件聚合框架你創建一個新的每次點擊一個按鈕時窗口? – user2697817

+0

@Ywah'log.DebugLogLb.Items'的類型是什麼?你如何將你的列表框綁定到它(如果你綁定它)?或者你將所有這些項目的文本聚合到一個文本屬性中?很難說這個代碼出了什麼問題 - 它沒有顯示太多。 –

回答

3

很難說沒有看到更多的代碼就會出錯。這是一個有效的例子。它會在MainWindow ctor中創建一個新的LogWindow並設置DataContext。當按鈕被點擊時,處理程序調用窗口上的顯示。 ListBox的itemssource屬性綁定到字符串的ObservableCollection。因此,任何添加/刪除都會在用戶界面上自動更新。

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> 


主窗口的代碼隱藏

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; } 
}