我将按钮传递给我的 MouseEventCommand 类。
我的命令课在这里
public static class MouseEnterCommand
{
public static ICommand GetCommand(Button button)
{
return button.GetValue(CommandProperty) as ICommand;
}
public static void SetCommand(Button button, ICommand command)
{
button.SetValue(CommandProperty, command);
}
public static readonly DependencyProperty CommandProperty =
DependencyProperty.RegisterAttached(
"Command",
typeof (ICommand),
typeof (MouseEnterCommand),
new PropertyMetadata(OnSetCommandCallback));
public static void OnSetCommandCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs eventArgs)
{
Button button = dependencyObject as Button;
if (button != null)
{
MouseEnterChangedBehavior behavior = GetOrCreateObject(button);
behavior.Command = eventArgs.NewValue as ICommand;
}
}
private static MouseEnterChangedBehavior GetOrCreateObject(Button button)
{
MouseEnterChangedBehavior behavior = button.GetValue(MouseEnterCommandBehaviorProperty) as MouseEnterChangedBehavior;
if (behavior == null)
{
behavior = new MouseEnterChangedBehavior(button);
button.SetValue(MouseEnterCommandBehaviorProperty, behavior);
}
return behavior;
}
private static readonly DependencyProperty MouseEnterCommandBehaviorProperty =
DependencyProperty.RegisterAttached(
"MouseEnterCommandBehavior",
typeof (object),
typeof (MouseEnterCommand),
null);
public static ICommand GetCommandParameter(Button button)
{
return button.GetValue(CommandParameterProperty) as ICommand;
}
public static void SetCommandParameter(Button button, object parameter)
{
button.SetValue(CommandParameterProperty, parameter);
}
public static readonly DependencyProperty CommandParameterProperty =
DependencyProperty.RegisterAttached(
"CommandParameter",
typeof(object),
typeof(MouseEnterCommand),
new PropertyMetadata(OnSetCommandParameterCallback));
public static void OnSetCommandParameterCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs eventArgs)
{
Button button = dependencyObject as Button;
if (button != null)
{
MouseEnterChangedBehavior behavior = GetOrCreateObject(button);
behavior.Command = eventArgs.NewValue as ICommand;
}
}
}
public class MouseEnterChangedBehavior:CommandBehaviorBase<Button>
{
public MouseEnterChangedBehavior(Button targetObject)
: base(targetObject)
{
targetObject.MouseEnter += OnMouseEnter;
}
private void OnMouseEnter(object sender, MouseEventArgs e)
{
ExecuteCommand();
}
}
我的 Silverlight 代码在这里
<Button Width="250"
Height="60"
Content="MyButton with MouseEnter"
commands:MouseEnterCommand.Command="{Binding MouseEnterCommand}"
commands:MouseEnterCommand.CommandParameter="{Binding RelativeSource={RelativeSource Self}}"
/>
我的Modev视图是这样的
public class MouseEnterViewModel
{
private ICommand mouseEnterCommand;
public ICommand MouseEnterCommand
{
get
{
if(mouseEnterCommand==null)
{
mouseEnterCommand =new DelegateCommand<object>(OnButtonMouseEnter);
}
return mouseEnterCommand;
}
}
public void OnButtonMouseEnter(object obj)
{
// !!!!!!! obj is coming null ????????????????
}
}
我的问题是我的 obj 对象即将为 Null。
我在 MouseEnterCommand 类中断点,我看到按钮来到这里,并且 ExecuteCommand 运行良好。但在模型视图中,obj 即将为空。