Я создал поведение, аналогичное событию EditStarted формы данных.
public class EditableDataFormBehavior : Behavior<RadDataForm>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.Loaded += AssociatedObject_Loaded;
}
void AssociatedObject_Loaded(object sender, RoutedEventArgs e)
{
AssociatedObject.CurrentItemChanged += AssociatedObject_CurrentItemChanged;
}
void AssociatedObject_CurrentItemChanged(object sender, EventArgs e)
{
var editableObject = AssociatedObject.CurrentItem as INotifyEditableObject;
if (editableObject != null)
{
editableObject.EditStarted += Object_EditStarted;
}
}
void Object_EditStarted(object sender, EventArgs e)
{
AssociatedObject.BeginEdit();
}
protected override void OnDetaching()
{
// detach the event handler
AssociatedObject.Loaded -= AssociatedObject_Loaded;
AssociatedObject.CurrentItemChanged -= AssociatedObject_CurrentItemChanged;
var editableObject = AssociatedObject.DataContext as INotifyEditableObject;
if(editableObject!=null)
editableObject.EditStarted -= Object_EditStarted;
base.OnDetaching();
}
}
Вам просто нужно немного изменить, добавив вместо этого событие IsEnabledChanged. Вы пытаетесь добиться только поведения представления, и модель представления ничего не должна знать об этом. Основным преимуществом такого подхода является то, что он более пригоден для повторного использования, чем код.
В обработчике событий вы добавите свой код:
if (!IsEnabled)
{
VisualStateManager.GoToState(DataForm, "Disabled", true);
}
else
{
VisualStateManager.GoToState(DataForm, "Normal", true);
}
Прикрепить поведение к форме данных (моя была создана для телерика, но должна быть выполнена с помощью sdk)
<i:Interaction.Behaviors>
<utilities:EditableDataFormBehavior/>
</i:Interaction.Behaviors>