【问题标题】:How to receive the InkCanvas.StrokeCollected event in the view model如何在视图模型中接收 InkCanvas.StrokeCollected 事件
【发布时间】:2014-08-18 04:59:59
【问题描述】:

在使用 MVVM 模式时,我有一个自定义的 inkcanvas:

   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 绑定到笔划,因为自定义 inkcanvas 将调用 StrokeCollection.CollectionChanged 事件 3 次。

感谢任何帮助。

【问题讨论】:

    标签: wpf mvvm inkcanvas


    【解决方案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

    【讨论】:

    • 如果你不想在后面没有代码,请使用 EventTrigger 我在答案中添加了一个链接
    【解决方案2】:

    您只需像以前那样通过 XAML 绑定它,这是正确的方法。

    你得到 3 个事件,没关系。只需处理您需要的那个。

    例如,如果您只对StrokeCollectedEvent 感兴趣,那么就这样做

    protected override void OnStrokeCollected(InkCanvasStrokeCollectedEventArgs e)
    {
         if(e.RoutedEvent != InkCanvas.StrokeCollectedEvent) 
             return;
    
         // handle the event
    }
    

    有关事件的完整列表,请参阅 InkCanvas MSDN 文档的“Fields”部分。以“Event”结尾的字段是RoutedEvent常量,在InkCanvasStrokeCollectedEventArgs中传递。

    【讨论】:

    • 我想在视图模型中处理事件。如何让视图模型从自定义墨迹控件接收此事件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多