public override void UpdateValue ()
{
var oldValue = Value;
// The simple case - we use the source object directly, whatever it is.
if (BindsDirectlyToSource) {
ValueType = Source == null ? null : Source.GetType ();
Value = Source;
} else {
var usableSource = Source;
ICollectionView view = null;
if (Source is CollectionViewSource) {
usableSource = null;
view = ((CollectionViewSource) Source).View;
} else if (Source is ICollectionView) {
view = (ICollectionView) Source;
}
// If we have no ICollectionView, then use the Source directly.
if (view == null) {
ValueType = usableSource == null ? null : usableSource.GetType ();
Value = usableSource;
} else {
// If we have an ICollectionView and the property we're binding to exists
// on ICollectionView, we bind to the view. Otherwise we bind to its CurrentItem.
if (BindToView) {
ValueType = view.GetType ();
Value = view;
} else {
ValueType = view.CurrentItem == null ? null : view.CurrentItem.GetType ();
Value = view.CurrentItem;
}
}
}
}
}