using System;
using System.ComponentModel;
public interface IExample
{
string A { get; set; }
}
public class Example: IExample, INotifyPropertyChanged
{
public Example()
{
}
/// Does not works properly...
string fooString;
string IExample.A
{
get { return this.fooString; }
set
{
this.fooString= value;
onPropertyChange("A");
}
}
PropertyChangedEventHandler propertyChangedHandler;
private void onPropertyChange(string propertyName)
{
if (this.propertyChangedHandler != null)
propertyChangedHandler(this, new PropertyChangedEventArgs(propertyName));
}
event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged
{
add { this.propertyChangedHandler += value; }
remove { this.
propertyChangedHandler -= value
; } }
}
public class Test
{
static void OnAChanged( object sender, PropertyChangedEventArgs e)
{
Console.WriteLine("A Changed.");
}
public static void Main()
{
var example = new Example();
((INotifyPropertyChanged)example).PropertyChanged += OnAChanged;
((IExample)example).A = "new string";
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29tcG9uZW50TW9kZWw7CgogIHB1YmxpYyBpbnRlcmZhY2UgSUV4YW1wbGUKICB7CiAgICBzdHJpbmcgQSB7IGdldDsgc2V0OyB9CiAgfQoKICBwdWJsaWMgY2xhc3MgRXhhbXBsZTogSUV4YW1wbGUsIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQKICB7CiAgICBwdWJsaWMgRXhhbXBsZSgpCiAgICB7CiAgICB9CgogICAgLy8vIERvZXMgbm90IHdvcmtzIHByb3Blcmx5Li4uIAogICAgc3RyaW5nIGZvb1N0cmluZzsKICAgIHN0cmluZyBJRXhhbXBsZS5BCiAgICB7CiAgICAgICAgZ2V0IHsgcmV0dXJuIHRoaXMuZm9vU3RyaW5nOyB9CiAgICAgICAgc2V0CiAgICAgICAgewogICAgICAgICAgICB0aGlzLmZvb1N0cmluZz0gdmFsdWU7CiAgICAgICAgICAgIG9uUHJvcGVydHlDaGFuZ2UoIkEiKTsKICAgICAgICB9CiAgICB9CgogICAgUHJvcGVydHlDaGFuZ2VkRXZlbnRIYW5kbGVyIHByb3BlcnR5Q2hhbmdlZEhhbmRsZXI7CgogICAgcHJpdmF0ZSB2b2lkIG9uUHJvcGVydHlDaGFuZ2Uoc3RyaW5nIHByb3BlcnR5TmFtZSkKICAgIHsKICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eUNoYW5nZWRIYW5kbGVyICE9IG51bGwpCiAgICAgICAgICAgIHByb3BlcnR5Q2hhbmdlZEhhbmRsZXIodGhpcywgbmV3IFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncyhwcm9wZXJ0eU5hbWUpKTsKICAgIH0KCiAgICBldmVudCBQcm9wZXJ0eUNoYW5nZWRFdmVudEhhbmRsZXIgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZC5Qcm9wZXJ0eUNoYW5nZWQKICAgIHsKICAgICAgICBhZGQgeyB0aGlzLnByb3BlcnR5Q2hhbmdlZEhhbmRsZXIgKz0gdmFsdWU7IH0KICAgICAgICByZW1vdmUgeyB0aGlzLnByb3BlcnR5Q2hhbmdlZEhhbmRsZXIgLT0gdmFsdWU7IH0KICAgIH0KCiB9CgpwdWJsaWMgY2xhc3MgVGVzdAp7CiAgICBzdGF0aWMgdm9pZCBPbkFDaGFuZ2VkKCBvYmplY3Qgc2VuZGVyLCBQcm9wZXJ0eUNoYW5nZWRFdmVudEFyZ3MgZSkKICAgIHsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiQSBDaGFuZ2VkLiIpOwogICAgfQogICAgCglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkJdmFyIGV4YW1wbGUgPSBuZXcgRXhhbXBsZSgpOwogICAgICAgICgoSU5vdGlmeVByb3BlcnR5Q2hhbmdlZClleGFtcGxlKS5Qcm9wZXJ0eUNoYW5nZWQgKz0gT25BQ2hhbmdlZDsKICAgICAgICAoKElFeGFtcGxlKWV4YW1wbGUpLkEgPSAibmV3IHN0cmluZyI7Cgl9Cn0=