我正在寻找如何使用 MVVM light 实现数据表单的属性 IsEnabledChanged 的示例,我设置了触发器但不确定实现。所以,这是版本背后的代码:
void DataForm_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (!IsEnabled)
{
VisualStateManager.GoToState(DataForm, "Disabled", true);
}
else
{
VisualStateManager.GoToState(DataForm, "Normal", true);
}
}
DataForm.IsEnabledChanged += new DependencyPropertyChangedEventHandler(DataForm_IsEnabledChanged);
在使用 MVVM light 的 xaml 中我这样做了:
<i:EventTrigger EventName="IsEnabledChanged">
<cmdextras:EventToCommand Command="{Binding IsEnabledChangedCommand}" CommandParameter="{Binding .}" />
</i:EventTrigger>
现在,需要弄清楚如何翻译后面的代码以使用中继命令。
我创建了一个行为,它执行与数据表单的 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);
}
将行为附加到数据表单(我的是为 Telerik 制作的,但应该可以通过 sdk 实现)
<i:Interaction.Behaviors>
<utilities:EditableDataFormBehavior/>
</i:Interaction.Behaviors>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)