Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WPF Button Pressed/Released Binding

I am new to WPF and trying to do my best to follow the MVVM button Im struggling with a current problem I have a view Model class

public class MainViewModel
{
    private bool _Reset;
    public bool Reset{ get{ return _Reset;} set {_Reset = value;} }
    ...
}

Now I want to bind a button so that if while Im pressing it _Reset is true and when I release it _Reset is false I feel like the command pattern is alot of work for a simple on/off

Is there a way to bind the IsPressed of a button to a property from my data context

I want to do this as simple as possible because I have a dozen or so buttons all doing the type of thing just other properties

like image 338
MDK Avatar asked Jan 27 '16 16:01

MDK


1 Answers

So what you are going to need to do is import System.Windows.Interactivity. Go to references, add reference, Assemblies, Extensions. You will find it there. Next add it to your project

xmlns:inter="http://schemas.microsoft.com/expression/2010/interactivity"

you can now use the PreviewMouseLeftButtonDown and PreviewMouseLeftButtonUp event.

<Button Content="Some Button">
        <inter:Interaction.Triggers>
            <inter:EventTrigger EventName="PreviewMouseLeftButtonDown">
                <inter:InvokeCommandAction Command="{Binding ButtonDown}"/>
            </inter:EventTrigger>
            <inter:EventTrigger EventName="PreviewMouseLeftButtonUp">
                <inter:InvokeCommandAction Command="{Binding ButtonUp}"/>
            </inter:EventTrigger>
        </inter:Interaction.Triggers>
    </Button>

 public class MainViewModel : ViewModelBase
{
    public MainViewModel()
    {
        ButtonDown = new RelayCommand(OnButtonDown);
        ButtonUp = new RelayCommand(OnButtonUp);
    }
    public RelayCommand ButtonDown { get; set; }
    public RelayCommand ButtonUp { get; set; }

    private void OnButtonUp()
    {
        Debug.WriteLine("Button Released");
    }

    private void OnButtonDown()
    {
        Debug.WriteLine("Button Pressed");
    }
}
like image 50
mrsargent Avatar answered Oct 13 '22 01:10

mrsargent