Alan Wayne
Alan Wayne

Reputation: 5384

How to receive the InkCanvas.StrokeCollected event in the view model

In using MVVM pattern, I have a custom inkcanvas with:

   protected override void OnStrokeCollected(InkCanvasStrokeCollectedEventArgs e)
    {
        CustomStroke newStroke = new CustomStroke(e.Stroke.StylusPoints, e.Stroke.DrawingAttributes);
        this.Strokes.Remove(e.Stroke);
        this.Strokes.Add(newStroke);
        InkCanvasStrokeCollectedEventArgs eNew = new InkCanvasStrokeCollectedEventArgs(newStroke);

        // Raises the System.Windows.Controls.InkCanvas.StrokeCollected event.
        base.OnStrokeCollected(eNew);
    }

How do I get the view model to receive the InkCanvas.StrokeCollected event?

I can not bind the XAML to the strokes as the StrokeCollection.CollectionChanged event will be called three times by the custom inkcanvas.

Any help is appreciated.

Upvotes: 1

Views: 726

Answers (2)

yo chauhan
yo chauhan

Reputation: 12295

Try this

    public Window3()
    {
        InitializeComponent();
        var vm=new ViewModel();
        this.DataContext = vm;
        canvas.StrokeCollected += vm.OnStrokeCollected;
    }

ViewModel

public class ViewModel
{
    public void OnStrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e)
    { 

    }
}

Edit

if you want to do it without codebehind see the article EventTrigger

Upvotes: 1

Tseng
Tseng

Reputation: 64141

You simply bind it via XAML as you already did, which is the correct way to do it.

That you get 3 events, doesn't matter. Just handle the one you need.

For example, if you are only interested in the StrokeCollectedEvent, then just do

protected override void OnStrokeCollected(InkCanvasStrokeCollectedEventArgs e)
{
     if(e.RoutedEvent != InkCanvas.StrokeCollectedEvent) 
         return;

     // handle the event
}

For a full list of Events, consult the "Fields" Section of InkCanvas MSDN documentation. The fields ending with "Event" are RoutedEvent constants, which are passed in the InkCanvasStrokeCollectedEventArgs.

Upvotes: 1

Related Questions