在使用MVVM模式时,我有一个自定义的墨迹:
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);
}
如何让视图模型接收InkCanvas.StrokeCollected事件?
我无法将XAML绑定到笔划,因为StrokeCollection.CollectionChanged事件将被自定义墨迹扫描三次调用。
感谢任何帮助。
答案 0 :(得分:1)
试试这个
public Window3()
{
InitializeComponent();
var vm=new ViewModel();
this.DataContext = vm;
canvas.StrokeCollected += vm.OnStrokeCollected;
}
视图模型
public class ViewModel
{
public void OnStrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e)
{
}
}
修改
如果您想在没有代码隐藏的情况下执行此操作,请参阅文章EventTrigger
答案 1 :(得分:1)
您只需通过XAML将其绑定,就像您已经做的那样,这是正确的方法。
你得到3个事件,并不重要。只需处理您需要的那个。
例如,如果您只对StrokeCollectedEvent
感兴趣,那么只需执行
protected override void OnStrokeCollected(InkCanvasStrokeCollectedEventArgs e)
{
if(e.RoutedEvent != InkCanvas.StrokeCollectedEvent)
return;
// handle the event
}
有关活动的完整列表,请参阅" Fields" InkCanvas MSDN文档的一节。以" Event"结尾的字段;是RoutedEvent常量,它们在InkCanvasStrokeCollectedEventArgs
。