我现在正在Silverlight 5中写一个网站。我有一个公共静态类设置,并在该类中我定义了一个公共静态int。在MainPage类(公共部分类)中,我想在更改public static int时捕获事件。有什么方法可以为我设置一个事件来做这件事,还是有另一种方式我可以得到相同的行为? (或者我正在尝试做什么?)
答案 0 :(得分:4)
要详细说明Hans所说的内容,您可以使用属性而不是字段
字段:
public static class Foo {
public static int Bar = 5;
}
属性:
public static class Foo {
private static int bar = 5;
public static int Bar {
get {
return bar;
}
set {
bar = value;
//callback here
}
}
}
使用属性就像常规字段一样。对它们进行编码时,value
关键字会自动传递给set访问器,并且是变量设置的值。例如,
Foo.Bar = 100
将通过100
,因此value
将为100
。
属性本身不存储值,除非它们是自动实现的,在这种情况下,您将无法为访问器定义主体(get和set)。这就是我们使用私有变量bar
来存储实际整数值的原因。
编辑:实际上,msdn有一个更好的例子:
using System.ComponentModel;
namespace SDKSample
{
// This class implements INotifyPropertyChanged
// to support one-way and two-way bindings
// (such that the UI element updates when the source
// has been changed dynamically)
public class Person : INotifyPropertyChanged
{
private string name;
// Declare the event
public event PropertyChangedEventHandler PropertyChanged;
public Person()
{
}
public Person(string value)
{
this.name = value;
}
public string PersonName
{
get { return name; }
set
{
name = value;
// Call OnPropertyChanged whenever the property is updated
OnPropertyChanged("PersonName");
}
}
// Create the OnPropertyChanged method to raise the event
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
}