Просто расширение этого решения , которое существует выше, на случай, если вы используете Prism Library
(если нет, то прекратите чтение сейчас, есть ничего для вас)
Мне действительно нравится это решение, и я думаю, что оно лучше, чем любое другое решение, я просто хочу сделать небольшое усовершенствование этого решения, предоставляемого Prism Library.
это решение использует
<i:InvokeCommandAction Command="{Binding RegionChangedCmd}" />
обратите внимание на i:
перед InvokeCommandAction
. Это означает, что класс InvokeCommandAction
существует в пространстве имен xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
. Это хорошо и хорошо, но обратите внимание, что библиотека Prism имеет точно такой же класс с тем же именем InvokeCommandAction
. Он просто существует в другом пространстве имен, в пространстве имен xmlns:prism="http://prismlibrary.com/"
.
Таким образом, вы можете заменить следующий XAML
<i:InvokeCommandAction Command="{Binding RegionChangedCmd}" />
с этим XAML
<prism:InvokeCommandAction Command="{Binding RegionChangedCmd}" />
Хорошо, мы можем это сделать, в чем выгода?
Чтобы заметить преимущество, напишите следующую команду в ViewModel
public ICommand RegionChangedCmd { get; }
public ViewModelConstructor()
{
RegionChangedCmd = new DelegateCommand<SelectionChangedEventArgs>(RegionChangedCmdExecuted);
}
public void RegionChangedCmdExecuted(SelectionChangedEventArgs e)
{
// e parameter is null if you use <i:InvokeCommandAction>
// e parameter is NOT null if you use <prism:InvokeCommandAction>
}
е параметр ноль , если вы используете <i:InvokeCommandAction>
Параметр НЕ равен нулю , если вы используете <prism:InvokeCommandAction>