假设我有一个界面和两个类:
public interface Imyinterface
{
string Text { get; set; }
}
public class Class1 : Imyinterface
{
public string Text { get; set; }
}
public class Class2 : Imyinterface
{
public string Text { get; set; }
}
“问题”是这两个类之间的沟通。我的意思是 - 我希望Class2知道Class1中字符串“Text”的更改时间及其值是什么。
答案 0 :(得分:4)
一般来说:
你必须使用观察者模式。
制作一个订阅方法,Imyinterface的每个实例都需要知道文本更改应该调用此方法。现在在' Text'更改文本并通知所有订阅者。
答案 1 :(得分:0)
添加活动
正如spender的评论中所提到的,您应该在界面中添加一个文本更改的事件:
public interface IMyInterface
{
// This event is raised whenever the value of Text is modified:
event Action<IMyInterface, string> TextChanged;
string Text { get; set; }
}
实现接口的类应该在Text
属性更改时引发该事件:
public class Class1 : IMyInterface
{
public event Action<IMyInterface, string> TextChanged;
protected void RaiseTextChanged(string newValue)
{
var handler = TextChanged;
if (handler != null)
handler(this, newValue);
}
private string _text;
public string Text
{
get { return _text; }
set { _text = value; RaiseTextChanged(value); }
}
}
对事件做出反应
任何对Text
对象的IMyInterface
属性的更改感兴趣的代码都可以注册一个事件处理程序:
IMyInterface thing = new Class1();
thing.TextChanged += Thing_TextChanged;
...
void Thing_TextChanged(IMyInterface sender, string newValue)
{
// Do something with the new value
}
您的具体用例
在您的特定情况下,您可以将以下代码添加到MainPage.xaml.cs
:
// In MainPage's constructor, after the call to InitializeComponent:
popupControl2.TextChanged += PopupControl_TextChanged;
// A separate method in the MainPage class:
private void PopupControl_TextChanged(IMyInterface sender, string newValue)
{
// Do what needs to be done with the next Text value here
}
请注意,Silverlight控件和主页面类都不需要实现该接口。根据我对你的情况的理解,到目前为止根本不需要界面,但我认为这取决于你还没有告诉我们的其他要求。