也許結合可幫助。 (它可能過於複雜的事情,如果你還在學習WPF雖然)。
用結合,我們可以使ListView
只能是你的日誌記錄的可見表示,這意味着添加的邏輯/刪除日誌,可以留在ListView
完全獨立。
class LogEntry
{
public string Source { get; set; }
public string Message { get; set; }
public LogEntry(string source, string message)
{
Source = source;
Message = message;
}
}
class Listener
{
private int m_maxLogs = 10;
private ObservableCollection<LogEntry> m_logEntries;
public ObservableCollection<LogEntry> LogEntries { get { return m_logEntries; } }
public Listener()
{
m_logEntries = new ObservableCollection<LogEntry>();
}
public void AddLogEntry(string source, string message)
{
if (LogEntries.Count >= m_maxLogs)
{
//Remove the oldest LogEntry.
LogEntries.RemoveAt(0);
}
LogEntries.Add(new LogEntry(source, message));
}
}
如果DataContext設置監聽器實例的XAML變(基於以前的答案):
<ListView ItemsSource="{Binding LogEntries}">
<ListView.View>
<GridView>
<GridViewColumn Header="Source" Width="120" DisplayMemberBinding="{Binding Source}"/>
<GridViewColumn Header="Message" Width="400" DisplayMemberBinding="{Binding Message}"/>
</GridView>
</ListView.View>
</ListView>
如果要動態地更改日誌條目的文本出於某種原因,您需要在LogEntry類中實現INotifyPropertyChanged
接口以更新列表視圖。
如果沒有更適合變成了我給它一個嘗試和信貸您的回答。我很新的WPF,我不能確認這是否是最好的解決辦法:) – carlsb3rg 2011-03-28 15:15:33
如果你想顯示源和消息以表格的形式(每個新的消息被認爲是一個新的訂單項),可能這是最簡單的方法。但是,如果你希望它更像一個'尾巴',並且只想保留最新的(比如說10條)消息,那麼:A.你需要在上面的解決方案中洗牌(不是好主意,或者B.你。需要尋找替代品 – publicgk 2011-03-28 16:57:57
好吧,我會認可您的答案,因爲它本來是一個很好的解決問題,我提出它的方式我會選擇的,但因爲其他問題的替代B;) – carlsb3rg 2011-03-29 11:59:44