我想您可以创建自己的类来维护一个值并INotifyPropertyChanged
针对您可以创建的包含类引发:
public Bindable<string> SomeField = new Bindable<string>("test", this);
然后 Binding againstSomeField
将访问包含的值并设置它会导致INotifyPropertyChanged
被提出反对this
您需要使用一些隐式转换运算符才能让绑定系统将您Bindable<T>
视为来源T
和放置位置T
请参阅:http: //msdn.microsoft.com/en-us/library/85w54y0a.aspx
以下内容可能就足够了:
public class Bindable<T>
{
private T _value;
private PropertyChangedEventHandler _notifyHandler;
private INotifyPropertyChanged _notifyTarget;
private string _name;
public Bindable(PropertyChangedEventHandler notifyHandler, INotifyPropertyChanged notifyTarget, string name, T value = default(T), bool trigger = false)
{
_value = value;
_name = name;
_notifyHandler = notifyHandler;
_notifyTarget = notifyTarget;
if (trigger)
{
_notifyHandler(_notifyTarget, new PropertyChangedEventArgs(_name));
}
}
public implicit operator T(Bindable<T> bindable)
{
return bindable._value;
}
public implicit operator Bindable<T>(T value)
{
return new Bindable<T>(_notifyHandler, _notifyTarget, _name, value, true);
}
}
上面的代码很粗糙,毫无疑问可以创建一个更好的版本,但它应该为你指明你需要去的方向。
在对我提出的解决方案进行进一步调查时,我发现由于为了记住目标和其他细节而隐式转换 from T
to开始工作会有问题Bindable<T>
,我确信这种解决方案包含足够的想法来引导到一个工作的。