У меня есть приложение WPF, использующее MVVM, приложение содержит 2 ListBoxes
.Так как я использую MVVM, я использую EventTriggers в моем XAML, как показано ниже:
<ListBox x:Name="ListBox1"
Grid.Row="0"
ItemsSource="{Binding EventLogs, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding SelectedLocalLog, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
ScrollViewer.HorizontalScrollBarVisibility="Hidden"
ScrollViewer.VerticalScrollBarVisibility="Auto"
SelectionMode="Single">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding LoadEventLogEntriesCommand}" CommandParameter="{Binding ElementName=ListBox1, Path=SelectedItem}" />
</i:EventTrigger>
<i:EventTrigger EventName="MouseDown">
<i:InvokeCommandAction Command="{Binding LoadEventLogEntriesCommand}" CommandParameter="{Binding ElementName=ListBox1, Path=SelectedItem}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</ListBox>
Код в моей ViewModel:
this.LoadEventLogEntriesCommand = new DelegateCommand(this.LoadLog);
private void LoadLog()
{
this.worker = new BackgroundWorker();
this.worker.ProgressChanged += new ProgressChangedEventHandler(this.UpdateProgress);
this.worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.RunWorkerCompleted);
this.worker.WorkerReportsProgress = true;
this.worker.WorkerSupportsCancellation = true;
this.worker.DoWork += new DoWorkEventHandler(this.ReadLog);
// read entries
if (worker.IsBusy != true)
{
worker.RunWorkerAsync(this);
}
}
Когда я щелкаю строку в ListBox
,Я запускаю Событие SelectionChanged
и поэтому вызываю мой метод LoadLog()
в моей ViewModel, который создает BackgroundWorker
для выполнения некоторых задач.Тем не менее, я понимаю, что это также вызывает мое MouseDown
событие, и поэтому этот метод вызывается дважды, так как у меня EventTriggers, связанные с одной и той же Командой в моей ViewModel.
Я хочу после Я уже щелкнул строку в ListBox. Я хочу щелкнуть по той же строке еще раз и вызвать и событие для запуска моей команды.Как я могу это сделать?