Что ж, наконец-то я получил событие, но похоже, что этот подход противоречит концепции шаблона MVVM, которая требует, чтобы модель представления ничего не знала и не зависела ни от каких элементов представления.
В моем случае я могу добавить Interaction.Triggers в Window и передать MouseButton в модель представления, используя usng InvokeCommandAction Prism , следующим образом:
<Window
xmlns:prism="http://prismlibrary.com/"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
/>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDown">
<prism:InvokeCommandAction Command="{Binding WindowMouseCommand}" TriggerParameterPath="ChangedButton" />
</i:EventTrigger>
</i:Interaction.Triggers>
и в модели представления:
public DelegateCommand<object> WindowMouseCommand { get; private set; }
...
WindowMouseCommand = new DelegateCommand<object>(WindowMouse);
...
private void WindowMouse(object mouseButton)
{
if (mouseButton is MouseButton m)
{
if (m == MouseButton.Left)
{
// DragMove();
}
}
}
, если я хочу вызвать .DragMove () Мне нужна ссылка на окно ... это не правильная реализация шаблона MVVM.
Так, каков наилучший подход / практика для этого?
Я внезапно просветился, когда увидел этот ответ: https://stackoverflow.com/a/3426183/10958770
да, перемещение окнаэто логика чистого пользовательского интерфейса , поэтому нет необходимости перемещать его в ViewModel ... поэтому позвольте мне просто оставить его в виде.