[英]C# - how to check if string value has changed within a different class?
我有一堂課如下:
class TestSomeData
{
public string someString;
public void CheckSomeStuff()
{
foreach(string x in someList)
{
someString = x;
}
}
}
我想做的是:
TestSomeData test = new TestSomeData;
test.CheckSomeStuff();
label1.Content = test.someString;
因此,如果 x 是 CheckSomeStuff 中 someList 中的 1、2、3、4、5,我需要 label1.Content 來反映這一點,但來自不同的類。 我怎么做?
一個類可以通過聲明事件來通知其他類對其所做的更改
public class SomeDataClass
{
public event EventHandler SomeDataChanged;
private string _someData;
public string SomeData
{
get { return _someData; }
set
{
if (value != _someData) {
_someData = value;
OnSomeDataChanged();
}
}
}
private void OnSomeDataChanged()
{
SomeDataChanged?.Invoke(this, EventArgs.Empty);
}
}
class InterestedClass
{
public void Work()
{
var someData = new SomeDataClass();
someData.SomeDataChanged += someData_SomeDataChanged;
someData.SomeData = "New Value";
}
void someData_SomeDataChanged(object sender, EventArgs e)
{
Console.WriteLine("Some data changed: {0}", ((SomeDataClass)sender).SomeData);
}
}
您還可以將事件設為靜態。 這將允許偵聽器偵聽此類的任何實例的更改。
SomeDataClass.SomeDataChanged += SomeDataClass_SomeDataChanged;
var someData = new SomeDataClass();
someData.SomeData = "New Value";
var someOtherData = new SomeDataClass();
someData.SomeData = "Other Value";
您可以傳遞對控件的引用,以便您可以直接更改其文本。 並不是說這個設計特別漂亮,但它可以完成工作。
class TestSomeData
{
public TestSomeData(Label myControl) {
this.MyControl = myControl;
}
private Label MyControl { get; set; }
public void CheckSomeStuff()
{
if (this.MyControl == null) {
// throw ArgumentNullException or InvalidOperationException
}
foreach(string x in someList)
{
this.MyControl.Content = x;
}
}
}
同樣正如其他人所指出的,控件將始終具有列表中的最后一個值。 如果您試圖讓標簽在列表枚舉時顯示每個值,您將不得不添加一些 UI 邏輯來強制控件刷新或重新繪制。
您應該將該字段設為 static 。 該類的所有實例都將具有共同點。 任何更改都將是全球性的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.