Обработка SelectionChanged и MouseDown - PullRequest
0 голосов
/ 25 мая 2018

У меня есть приложение 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. Я хочу щелкнуть по той же строке еще раз и вызвать и событие для запуска моей команды.Как я могу это сделать?

1 Ответ

0 голосов
/ 25 мая 2018

Вы можете попытаться обработать событие MouseUp (только):

<i:EventTrigger EventName="MouseUp">
    <i:InvokeCommandAction Command="{Binding LoadEventLogEntriesCommand}" CommandParameter="{Binding ElementName=ListBox1, Path=SelectedItem}" />
</i:EventTrigger>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...