我将按钮传递给我的MouseEventCommand类。
我的Command类在这里
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();
}
}
我的银光代码在这里
<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对象即将来临。
我在MouseEnterCommand类中断点,我看到按钮来了,ExecuteCommand运行良好。但是在模型视图中,obj将变为空。
答案 0 :(得分:0)
您可以检查在OnMouseEnter事件处理程序中调用的ExecuteCommand方法。您没有从该位置进一步传递发件人对象。
验证是否应将sender对象作为输入参数传递给ExecuteCommand()
public class MouseEnterChangedBehavior:CommandBehaviorBase<Button>
{
public MouseEnterChangedBehavior(Button targetObject)
: base(targetObject)
{
targetObject.MouseEnter += OnMouseEnter;
}
private void OnMouseEnter(object sender, MouseEventArgs e)
{ // check if you can pass sender object as input to this method
ExecuteCommand();
}
}