我正在寻找一种方法,以便能够在命名空间中的任何位置(例如,在不同的类中)调用数据到同一文本文件和列表框的全局方法。
我的实现涉及一个静态类,它记录到文本文件并更新List数据。
List数据是一个全局变量,可以访问命名空间中的任何位置。最后,我希望通过绑定
listbox1.DataSource = logList;
会解决问题。但是,很明显它执行深拷贝而不是浅拷贝。 :(
有没有办法绑定列表的引用而不是克隆?
以下是相关代码:
namespace Test
{
static class LOGS
{
public static void LOG_PRINT(string logMessage)
{
try
{
if (logMessage == "") return;
// Output to text file.
using (StreamWriter w = System.IO.File.AppendText(cls_globalvariables.systemlogpath))
{
w.WriteLine("[" + DateTime.Now + "][" + logMessage + "]");
w.Close();
}
// Save to memory
cls_globalvariables.logList.Add(logMessage);
}
catch (Exception)
{ }
}
} //
public static class cls_globalvariables
{
public static List<string> logList = new List<string>();
public static string systemlogpath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\logs.txt";
.....
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// Model -> View Concept
listBox1.DataSource = cls_globalvariables.logList;
LOGS.LOG_PRINT("Hello");
} //
}
}
答案 0 :(得分:1)
List不支持数据绑定事件,要有使用BindingList所需的数据绑定事件的列表。
public static class cls_globalvariables
{
public static BindingList<string> logList = new BindingList<string>();
或者您可以使用ObservableCollection<T>
答案 1 :(得分:0)
我找到了一个临时解决方案。首先,我试过了。
1。)将全局变量更改为BindingList列表类型。
2。)listBox1.DataSource = list;在构造函数中。
3。)在数字2之后向全局变量列表添加一个条目,但它没有用。
4.。)我也尝试在ListChanged事件中重新绑定DataSource,但无济于事。
然后我尝试了下面的操作。
1。)将全局变量更改为BindingList列表类型。
2。)以下是代码段:
public partial class Form1 : Form
{
List<String> _mList;
public Form1()
{
InitializeComponent();
// Model -> View Concept
_mList = new List<string>();
cls_globalvariables.logList.ListChanged += new ListChangedEventHandler(logList_ListChanged);
listBox1.DataSource = _mList;
LOGS.LOG_PRINT("Hello");
LOGS.LOG_PRINT("Hello");
LOGS.LOG_PRINT("Hello");
}
void logList_ListChanged(object sender, ListChangedEventArgs e)
{
listBox1.DataSource = null;
if (cls_globalvariables.logList.Count != 0)
_mList.Add(cls_globalvariables.logList[cls_globalvariables.logList.Count - 1]);
listBox1.DataSource = _mList;
} //
....
}
我添加了一个成员变量List,因为将List重新绑定到listBox工作,而将BindingList绑定到listBox不起作用。我仍然不知道为什么它不起作用。