Событие WPF привязки от View to ViewModel?
Как лучше всего связать событие WPF в представлении ViewModel?
Я получил событие drop в моем представлении, но я хочу заменить его на обязательную привязку ViewModel.
Нашли несколько решений, но ни один из них не сделал то, что я оценил.
Просмотр кода:
<TextBox
AllowDrop="True"
PreviewDrop="email_Drop" />
Ответы
Ответ 1
Один из способов обработки событий в MVVM и XAML - использовать функции интерактивного взаимодействия. Это пространство имен содержит классы InvokeCommandAction и CallMethodAction.
InvokeCommandAction позволяет связать любое событие с командой view-model, в то время как CallMethodAction позволяет привязывать любое событие к методу модели представления.
Например, если вы хотите привязать событие DoubleClick кнопки к команде view-model, вы должны сделать следующее:
<Button>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding Path=DoSomethingCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
И объявив это пространство имен:
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
Все, что вам нужно для ссылки в ваших проектах, - установить Expression Blend или SDK Expression Blend.
Ответ 2
Ну, один способ сделать это - преобразовать это событие в команду, а затем привязать его к команде ведущего, т.е. определить поведение события.
Посмотрите, привязка событий WPF к ViewModel (для классов без команд)
Ответ 3
<Button MouseDoubleClick="{eb:EventBinding Command=DoSomethingCommand}">
</Button>
Команда
{eb: EventBinding} (Простой шаблон именования для поиска команды)
{eb: EventBinding Command = CommandName}
CommandParameter
$e (EventAgrs)
$this или $this.Property
строка
https://github.com/JonghoL/EventBindingMarkup
Ответ 4
Я получаю viewmodel из bindingcontext и активирую свой метод viewmodel оттуда
public partial class ParentView : ContentPage
{
public ParentView()
{
InitializeComponent();
}
private void LanguagePicker_SelectedIndexChanged(object sender, System.EventArgs e)
{
var parentViewModel = (ParentViewModel)this.BindingContext;
parentViewModel.SelectedLanguageChanged(sender,e);
}
}