gpt4 book ai didi

wpf - 绑定(bind)到单例类可观察集合成员

转载 作者:行者123 更新时间:2023-12-04 00:11:33 25 4
gpt4 key购买 nike

我似乎无法弄清楚这一点。我在这里发现了一些类似的问题,但要么我无法为我的方法找出正确的方向,要么我做的事情完全错误。

我的应用程序有一个单例类记录器,它保存了我程序中每个类的日志消息。

public class Logger
{
private Logger()
{

}

private static volatile Logger instance;

public static Logger GetInstance()
{
// DoubleLock
if (instance == null)
{
lock (m_lock)
{
if (instance == null)
{
instance = new Logger();
}
}
}
return instance;
}

//Helper for Thread Safety
private static object m_lock = new object();

private ObservableCollection<string> _Log;

public ObservableCollection<string> Log
{
get { return _Log; }
}

public void Add(string text)
{
if (_Log == null)
_Log = new ObservableCollection<string>();

Log.Add(DateTime.Now.ToString() + " " + text);
}

public void Clear()
{
_Log.Clear();
}

}

现在我想在我的 MainWindow 中将 Log 绑定(bind)到 ListBox,但我无法找出正确的 Binding
<ListBox Name="lstboxLog" Grid.Row="2" Margin="10,0,10,10" ItemsSource="{Binding Source={x:Static tools:Logger.Log}}" Height="100" />

tools 是我的 XAML 中单例类的命名空间。我敢肯定这比我想象的要简单,但我只是忽略了一些东西。

最佳答案

让您的GetInstance()获取属性的方法。
并且为了确保在您访问它之前实例化您的日志 Observable Collection。这样,如果在您调用第一个 Add() 之前绑定(bind)了绑定(bind),则不会覆盖该绑定(bind)。方法就可以了。

XAML:

ItemsSource="{Binding Source={x:Static tools:Logger.Instance}, Path=Log}"

记录仪:
public static Logger Instance
{
get
{
// DoubleLock
if (instance == null)
{
lock (m_lock)
{
if (instance == null)
{
instance = new Logger();
}
}
}
return instance;
}
}

//Helper for Thread Safety
private static object m_lock = new object();

private ObservableCollection<string> _Log;

public ObservableCollection<string> Log
{
get
{
if (_Log == null)
{
_Log = new ObservableCollection<string>();
}
return _Log;
}
}

public void Add(string text)
{
Log.Add(DateTime.Now.ToString() + " " + text);
}

关于wpf - 绑定(bind)到单例类可观察集合成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10242292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com