Это должно быть возможно через BindingExpressions
, попробуйте что-то вроде этого:
private void MyControl_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Escape)
{
var source = sender as FrameworkElement;
var expression = source.GetBindingExpression(UIElement.IsVisibleProperty);
(expression.DataItem as MyDataItem).IsControlVisible = false;
}
}
( Если вы не используете UIElement.IsVisibleProperty
повторно, вам нужно указать егочерез MyControl.IsVisibleProperty
конечно )
Вот метод использования отражения:
var source = sender as FrameworkElement;
var expression = source.GetBindingExpression(UIElement.IsVisibleProperty);
var dataType = expression.DataItem.GetType();
dataType.GetProperties().Single(x => x.Name == expression.ParentBinding.Path.Path)
.SetValue(expression.DataItem, false, null);