Как я могу лучше контролировать пузырьки действия с калибровочным микро? - PullRequest
1 голос
/ 24 мая 2019

У меня есть элемент управления Thumb, который пользователи могут перетаскивать по интерфейсу. При попытке перетаскивания элемента управления появляется исключение «Не найдена цель для метода Thumb_DragDelta». Я думаю, что проблема может заключаться в том, как у меня есть метод, написанный в модели представления, но я не уверен. Кроме того, метод не очень хорош MVVM, потому что он ссылается на представление напрямую, но опять же, не уверен, как его улучшить. Я очень плохо знаком с Caliburn Micro и программированием в целом. Любая помощь приветствуется!

Элемент управления большим пальцем в виде:

        <Thumb cal:Message.Attach="[Event DragDelta] = [Action Thumb_DragDelta($view)]"
               Background="blue"
               HorizontalAlignment="Left" 
               Width="20"/>

И соответствующий метод в viewmodel:

        private Thumb _thumb;

        public Thumb MyThumb
        {
            get
            {
                return _thumb;
            }
            set {
                _thumb = value;
                NotifyOfPropertyChange(() => MyThumb);
            }
        }

        public void Thumb_DragDelta(Views.NaturalDisasterView view, DragDeltaEventArgs e)
        {
            try
            {
                var transform = (TranslateTransform)MyThumb.RenderTransform;
                transform.X = Math.Max(0, Math.Min(transform.X + e.HorizontalChange, view.ActualWidth - MyThumb.ActualWidth));
                view.AfterScene.Clip = new RectangleGeometry() { Rect = new Rect(0, 0, transform.X, view.ActualHeight) };
            }

            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);

            }
        }

1 Ответ

1 голос
/ 24 мая 2019

Учитывая ваш текущий XAML, действительная подпись для метода Thumb_DragDelta в модели представления будет следующей, т.е. он принимает только один аргумент, который является ссылкой на представление, привязанное к модели представления:

public void Thumb_DragDelta(FrameworkElement view)
{
    //...
}

Если вы также хотите EventArgs, вы должны также передать $eventArgs:

<Thumb cal:Message.Attach="[Event DragDelta] = [Action Thumb_DragDelta($view, $eventArgs)]"
               Background="blue"
               HorizontalAlignment="Left" 
               Width="20"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...