Aggiunti riordinamento e navigazione aste migliorati

- Introdotti pulsanti "Sposta Su" e "Sposta Giù" per il
  riordinamento manuale delle aste nella lista.
- Implementata navigazione con frecce direzionali nella griglia,
  con aggiornamento automatico dei dettagli e scroll.
- Salvato automaticamente l'ordine delle aste su disco.
- Risolto conflitto con GridSplitter per le frecce direzionali.
- Aggiunti log dettagliati per le operazioni di riordinamento.
- Gestiti casi limite (es. asta già in cima o in fondo).
- Migliorata UX con pulsanti chiari e tooltip informativi.
- Aggiornati documentazione e changelog per riflettere le
  modifiche.
This commit is contained in:
2025-11-27 15:47:58 +01:00
parent d08e54657a
commit 3db0d946b7
7 changed files with 530 additions and 0 deletions

View File

@@ -203,6 +203,27 @@
Click="AddUrlButton_Click" Click="AddUrlButton_Click"
ToolTip="Aggiungi nuova asta"/> ToolTip="Aggiungi nuova asta"/>
<!-- NUOVO: Pulsanti per riordinare le aste (senza emoji) -->
<Button Content="Sposta Su"
x:Name="MoveUpButton"
Background="#9B4F96"
Style="{StaticResource SmallRoundedButton}"
Padding="10,5"
FontSize="11"
Margin="3,0"
Click="MoveUpButton_Click"
ToolTip="Sposta l'asta selezionata verso l'alto"/>
<Button Content="Sposta Giù"
x:Name="MoveDownButton"
Background="#9B4F96"
Style="{StaticResource SmallRoundedButton}"
Padding="10,5"
FontSize="11"
Margin="3,0"
Click="MoveDownButton_Click"
ToolTip="Sposta l'asta selezionata verso il basso"/>
<Button Content="Rimuovi" <Button Content="Rimuovi"
x:Name="RemoveUrlButton" x:Name="RemoveUrlButton"
Background="#3E3E42" Background="#3E3E42"

View File

@@ -122,6 +122,37 @@ namespace AutoBidder.Controls
// Previeni che l'evento venga gestito da altri controlli // Previeni che l'evento venga gestito da altri controlli
e.Handled = true; e.Handled = true;
} }
// NUOVO: Gestione esplicita frecce Su/Giù per navigazione
else if (e.Key == Key.Up && MultiAuctionsGrid.Items.Count > 0)
{
int currentIndex = MultiAuctionsGrid.SelectedIndex;
if (currentIndex > 0)
{
MultiAuctionsGrid.SelectedIndex = currentIndex - 1;
MultiAuctionsGrid.ScrollIntoView(MultiAuctionsGrid.SelectedItem);
e.Handled = true; // Previeni ridimensionamento pannelli
}
}
else if (e.Key == Key.Down && MultiAuctionsGrid.Items.Count > 0)
{
int currentIndex = MultiAuctionsGrid.SelectedIndex;
if (currentIndex < MultiAuctionsGrid.Items.Count - 1)
{
MultiAuctionsGrid.SelectedIndex = currentIndex + 1;
MultiAuctionsGrid.ScrollIntoView(MultiAuctionsGrid.SelectedItem);
e.Handled = true; // Previeni ridimensionamento pannelli
}
}
}
private void MoveUpButton_Click(object sender, RoutedEventArgs e)
{
RaiseEvent(new RoutedEventArgs(MoveUpClickedEvent, this));
}
private void MoveDownButton_Click(object sender, RoutedEventArgs e)
{
RaiseEvent(new RoutedEventArgs(MoveDownClickedEvent, this));
} }
private void CopyAuctionUrlButton_Click(object sender, RoutedEventArgs e) private void CopyAuctionUrlButton_Click(object sender, RoutedEventArgs e)
@@ -269,6 +300,13 @@ namespace AutoBidder.Controls
public static readonly RoutedEvent ConnectionStatusClickedEvent = EventManager.RegisterRoutedEvent( public static readonly RoutedEvent ConnectionStatusClickedEvent = EventManager.RegisterRoutedEvent(
"ConnectionStatusClicked", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(AuctionMonitorControl)); "ConnectionStatusClicked", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(AuctionMonitorControl));
// NUOVO: Eventi per riordinamento aste
public static readonly RoutedEvent MoveUpClickedEvent = EventManager.RegisterRoutedEvent(
"MoveUpClicked", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(AuctionMonitorControl));
public static readonly RoutedEvent MoveDownClickedEvent = EventManager.RegisterRoutedEvent(
"MoveDownClicked", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(AuctionMonitorControl));
public event RoutedEventHandler StartClicked public event RoutedEventHandler StartClicked
{ {
add { AddHandler(StartClickedEvent, value); } add { AddHandler(StartClickedEvent, value); }
@@ -406,5 +444,18 @@ namespace AutoBidder.Controls
add { AddHandler(ConnectionStatusClickedEvent, value); } add { AddHandler(ConnectionStatusClickedEvent, value); }
remove { RemoveHandler(ConnectionStatusClickedEvent, value); } remove { RemoveHandler(ConnectionStatusClickedEvent, value); }
} }
// NUOVO: Handler per eventi riordinamento
public event RoutedEventHandler MoveUpClicked
{
add { AddHandler(MoveUpClickedEvent, value); }
remove { RemoveHandler(MoveUpClickedEvent, value); }
}
public event RoutedEventHandler MoveDownClicked
{
add { AddHandler(MoveDownClickedEvent, value); }
remove { RemoveHandler(MoveDownClickedEvent, value); }
}
} }
} }

View File

@@ -556,5 +556,87 @@ namespace AutoBidder
AuctionMonitor.RefreshProductInfoButton.IsEnabled = true; AuctionMonitor.RefreshProductInfoButton.IsEnabled = true;
} }
} }
/// <summary>
/// Sposta l'asta selezionata verso l'alto nell'elenco
/// </summary>
private void MoveUpButton_Click(object sender, RoutedEventArgs e)
{
if (_selectedAuction == null)
{
MessageBox.Show("Seleziona un'asta dalla griglia", "Nessuna Selezione", MessageBoxButton.OK, MessageBoxImage.Information);
return;
}
try
{
var currentIndex = _auctionViewModels.IndexOf(_selectedAuction);
if (currentIndex <= 0)
{
// Già in cima o non trovata
Log($"[MOVE] L'asta è già in cima alla lista", LogLevel.Info);
return;
}
// Sposta l'elemento verso l'alto
_auctionViewModels.Move(currentIndex, currentIndex - 1);
// Mantieni la selezione
MultiAuctionsGrid.SelectedItem = _selectedAuction;
MultiAuctionsGrid.ScrollIntoView(_selectedAuction);
// Salva il nuovo ordine
SaveAuctions();
Log($"[MOVE UP] Asta spostata verso l'alto: {_selectedAuction.Name}", LogLevel.Success);
}
catch (Exception ex)
{
Log($"[ERRORE] Spostamento asta verso l'alto: {ex.Message}", LogLevel.Error);
MessageBox.Show($"Errore durante lo spostamento: {ex.Message}", "Errore", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
/// <summary>
/// Sposta l'asta selezionata verso il basso nell'elenco
/// </summary>
private void MoveDownButton_Click(object sender, RoutedEventArgs e)
{
if (_selectedAuction == null)
{
MessageBox.Show("Seleziona un'asta dalla griglia", "Nessuna Selezione", MessageBoxButton.OK, MessageBoxImage.Information);
return;
}
try
{
var currentIndex = _auctionViewModels.IndexOf(_selectedAuction);
if (currentIndex < 0 || currentIndex >= _auctionViewModels.Count - 1)
{
// Già in fondo o non trovata
Log($"[MOVE] L'asta è già in fondo alla lista", LogLevel.Info);
return;
}
// Sposta l'elemento verso il basso
_auctionViewModels.Move(currentIndex, currentIndex + 1);
// Mantieni la selezione
MultiAuctionsGrid.SelectedItem = _selectedAuction;
MultiAuctionsGrid.ScrollIntoView(_selectedAuction);
// Salva il nuovo ordine
SaveAuctions();
Log($"[MOVE DOWN] Asta spostata verso il basso: {_selectedAuction.Name}", LogLevel.Success);
}
catch (Exception ex)
{
Log($"[ERRORE] Spostamento asta verso il basso: {ex.Message}", LogLevel.Error);
MessageBox.Show($"Errore durante lo spostamento: {ex.Message}", "Errore", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
} }
} }

View File

@@ -117,6 +117,16 @@ namespace AutoBidder
RemoveAllButton_Click(sender, e); RemoveAllButton_Click(sender, e);
} }
private void AuctionMonitor_MoveUpClicked(object sender, RoutedEventArgs e)
{
MoveUpButton_Click(sender, e);
}
private void AuctionMonitor_MoveDownClicked(object sender, RoutedEventArgs e)
{
MoveDownButton_Click(sender, e);
}
private void AuctionMonitor_AuctionSelectionChanged(object sender, RoutedEventArgs e) private void AuctionMonitor_AuctionSelectionChanged(object sender, RoutedEventArgs e)
{ {
if (AuctionMonitor.MultiAuctionsGrid.SelectedItem is ViewModels.AuctionViewModel selected) if (AuctionMonitor.MultiAuctionsGrid.SelectedItem is ViewModels.AuctionViewModel selected)

View File

@@ -307,3 +307,27 @@ AutoBidder/
- Rimosso pulsante "Vai" non funzionale - Rimosso pulsante "Vai" non funzionale
- Cursore freccia + tooltip esplicativo - Cursore freccia + tooltip esplicativo
- UX più chiara e coerente - UX più chiara e coerente
- ✅ **Navigazione con frecce direzionali**: Naviga tra le aste con i tasti Su e Giù
- Comportamento nativo WPF della DataGrid
- Aggiornamento automatico pannello dettagli asta
- Scroll automatico per seguire la selezione
- Navigazione rapida senza usare il mouse
- ✅ **Riordinamento manuale aste**: Pulsanti per cambiare l'ordine delle aste nella lista
- Pulsante "↑ Sposta Su" per spostare verso l'alto
- Pulsante "↓ Sposta Giù" per spostare verso il basso
- Ordine salvato automaticamente su disco
- Gestione intelligente casi limite (cima/fondo)
- Logging dettagliato: `[MOVE UP]` / `[MOVE DOWN]`
- Permette di organizzare le aste per priorità o categoria
- ✅ **Navigazione con frecce direzionali**: Naviga tra le aste con i tasti Su e Giù
- Gestione esplicita in PreviewKeyDown con e.Handled = true
- Fix conflitto con GridSplitter (non modifica più altezza pannelli)
- Aggiornamento automatico pannello dettagli asta
- Scroll automatico per seguire la selezione
- Navigazione rapida senza usare il mouse
- ✅ **Riordinamento manuale aste**: Pulsanti per cambiare l'ordine delle aste nella lista
- Pulsanti "Sposta Su" e "Sposta Giù" (senza emoji per migliore compatibilità)
- Ordine salvato automaticamente su disco
- Gestione intelligente casi limite (cima/fondo)
- Logging dettagliato: `[MOVE UP]` / `[MOVE DOWN]`
- Permette di organizzare le aste per priorità o categoria

View File

@@ -0,0 +1,340 @@
# Feature: Navigazione e Riordinamento Aste
## Descrizione
Questa feature aggiunge due funzionalità per migliorare la gestione delle aste nella lista:
1. **Navigazione con frecce direzionali** ????
2. **Riordinamento manuale** con pulsanti ????
## Funzionalità Implementate
### 1?? Navigazione con Frecce Direzionali
Puoi navigare tra le aste usando le **frecce Su e Giù** sulla tastiera.
#### Come Usare
1. Clicca su un'asta nella griglia per selezionarla (assicurati che la griglia abbia il focus)
2. Usa le **frecce ?? Su** e **?? Giù** per spostarti tra le aste
3. Il pannello "Impostazioni" si aggiorna automaticamente mostrando i dettagli dell'asta selezionata
#### Comportamento
- **Gestione esplicita**: Le frecce cambiano la selezione nella DataGrid
- **Prevenzione conflitti**: L'evento viene marcato come `Handled` per evitare che i GridSplitter intercettino le frecce
- Lo **scroll automatico** segue la selezione
- L'evento `SelectionChanged` aggiorna i dettagli dell'asta
#### Vantaggi
- ? Navigazione rapida senza mouse
- ? Scorrimento fluido della lista
- ? Aggiornamento immediato dei dettagli
- ? Non interferisce con i GridSplitter
---
### 2?? Riordinamento Manuale Aste
Puoi **cambiare l'ordine** delle aste nella lista usando i pulsanti dedicati.
#### Come Usare
**Pulsanti nella Toolbar:**
- **Sposta Su**: Sposta l'asta selezionata verso l'alto
- **Sposta Giù**: Sposta l'asta selezionata verso il basso
**Posizione dei Pulsanti:**
```
???????????????????????????????????????????????????????????????
? Aste monitorate: 5 ?
? [Aggiungi] [Sposta Su] [Sposta Giù] [Rimuovi] [Rimuovi Tutte] ?
???????????????????????????????????????????????????????????????
```
#### Funzionamento
1. **Seleziona** un'asta dalla griglia
2. Clicca su **"Sposta Su"** per spostarla verso l'alto
3. Clicca su **"Sposta Giù"** per spostarla verso il basso
4. L'ordine viene **salvato automaticamente** su disco
#### Comportamento
- **In cima**: Se l'asta è già in cima, il pulsante "Sposta Su" non fa nulla
- **In fondo**: Se l'asta è già in fondo, il pulsante "Sposta Giù" non fa nulla
- **Selezione mantenuta**: L'asta rimane selezionata dopo lo spostamento
- **Auto-scroll**: La vista scorre automaticamente per mostrare l'asta
#### Logging
```
[MOVE UP] Asta spostata verso l'alto: Nome Asta
[MOVE DOWN] Asta spostata verso il basso: Nome Asta
[MOVE] L'asta è già in cima alla lista
[MOVE] L'asta è già in fondo alla lista
```
---
## Design UI
### Pulsanti Riordinamento
- **Colore**: Viola `#9B4F96` (stesso colore del pulsante "Punta")
- **Testo**: Semplice "Sposta Su" / "Sposta Giù" (senza emoji)
- **Stile**: Arrotondati con padding compatto
- **Dimensione**: Piccola (`SmallRoundedButton`)
### Tooltip
- **"Sposta Su"**: "Sposta l'asta selezionata verso l'alto"
- **"Sposta Giù"**: "Sposta l'asta selezionata verso il basso"
---
## Implementazione Tecnica
### File Modificati
#### 1. `Controls\AuctionMonitorControl.xaml`
```xml
<Button Content="Sposta Su"
x:Name="MoveUpButton"
Background="#9B4F96"
Style="{StaticResource SmallRoundedButton}"
Click="MoveUpButton_Click"
ToolTip="Sposta l'asta selezionata verso l'alto"/>
<Button Content="Sposta Giù"
x:Name="MoveDownButton"
Background="#9B4F96"
Style="{StaticResource SmallRoundedButton}"
Click="MoveDownButton_Click"
ToolTip="Sposta l'asta selezionata verso il basso"/>
```
#### 2. `Controls\AuctionMonitorControl.xaml.cs`
```csharp
// Gestione esplicita frecce Su/Giù
private void MultiAuctionsGrid_PreviewKeyDown(object sender, KeyEventArgs e)
{
// ... gestione Delete ...
// Gestione frecce Su/Giù
else if (e.Key == Key.Up && MultiAuctionsGrid.Items.Count > 0)
{
int currentIndex = MultiAuctionsGrid.SelectedIndex;
if (currentIndex > 0)
{
MultiAuctionsGrid.SelectedIndex = currentIndex - 1;
MultiAuctionsGrid.ScrollIntoView(MultiAuctionsGrid.SelectedItem);
e.Handled = true; // Previeni ridimensionamento pannelli
}
}
else if (e.Key == Key.Down && MultiAuctionsGrid.Items.Count > 0)
{
int currentIndex = MultiAuctionsGrid.SelectedIndex;
if (currentIndex < MultiAuctionsGrid.Items.Count - 1)
{
MultiAuctionsGrid.SelectedIndex = currentIndex + 1;
MultiAuctionsGrid.ScrollIntoView(MultiAuctionsGrid.SelectedItem);
e.Handled = true; // Previeni ridimensionamento pannelli
}
}
}
```
#### 3. `MainWindow.xaml`
```xml
<controls:AuctionMonitorControl
MoveUpClicked="AuctionMonitor_MoveUpClicked"
MoveDownClicked="AuctionMonitor_MoveDownClicked"
... />
```
#### 4. `Core\MainWindow.ControlEvents.cs`
```csharp
private void AuctionMonitor_MoveUpClicked(object sender, RoutedEventArgs e)
{
MoveUpButton_Click(sender, e);
}
private void AuctionMonitor_MoveDownClicked(object sender, RoutedEventArgs e)
{
MoveDownButton_Click(sender, e);
}
```
#### 5. `Core\MainWindow.ButtonHandlers.cs`
```csharp
private void MoveUpButton_Click(object sender, RoutedEventArgs e)
{
// Sposta verso l'alto usando ObservableCollection.Move()
var currentIndex = _auctionViewModels.IndexOf(_selectedAuction);
if (currentIndex > 0)
{
_auctionViewModels.Move(currentIndex, currentIndex - 1);
SaveAuctions(); // Persiste l'ordine
}
}
private void MoveDownButton_Click(object sender, RoutedEventArgs e)
{
// Sposta verso il basso usando ObservableCollection.Move()
var currentIndex = _auctionViewModels.IndexOf(_selectedAuction);
if (currentIndex < _auctionViewModels.Count - 1)
{
_auctionViewModels.Move(currentIndex, currentIndex + 1);
SaveAuctions(); // Persiste l'ordine
}
}
```
---
## Fix Problema Frecce e GridSplitter
### Problema Originale
Le frecce Su/Giù modificavano l'altezza dei pannelli invece di navigare tra le aste, perché i `GridSplitter` intercettavano gli eventi prima della DataGrid.
### Soluzione Implementata
1. **Gestione esplicita** delle frecce in `PreviewKeyDown`
2. **e.Handled = true** per bloccare la propagazione dell'evento
3. **Cambio manuale** dell'indice selezionato nella DataGrid
4. **ScrollIntoView** per mantenere l'asta selezionata visibile
### Risultato
? Le frecce Su/Giù ora navigano correttamente tra le aste
? Non interferiscono più con i GridSplitter
? L'evento SelectionChanged viene correttamente sollevato
---
## Come Testare
### Test Navigazione con Frecce
1. Avvia l'applicazione
2. Aggiungi almeno **3 aste**
3. Clicca sulla **prima asta** nella griglia
4. Premi **freccia Giù** ?? ? La selezione si sposta sulla seconda asta
5. Premi **freccia Su** ?? ? La selezione torna alla prima asta
6. Verifica che:
- ? Il pannello "Impostazioni" si aggiorna
- ? L'altezza dei pannelli **NON cambia**
- ? Lo scroll segue la selezione
### Test Riordinamento Manuale
1. Avvia l'applicazione
2. Aggiungi almeno **3 aste** (es. Asta A, Asta B, Asta C)
3. Seleziona **Asta B** (quella in mezzo)
4. Clicca su **"Sposta Su"**
- ? Asta B si sposta sopra Asta A
- ? Ordine diventa: B, A, C
5. Clicca su **"Sposta Giù"** (con B ancora selezionata)
- ? Asta B torna nella posizione originale
- ? Ordine diventa: A, B, C
6. Chiudi e riapri l'applicazione
- ? L'ordine è **persistito** correttamente
### Test Casi Limite
1. **In cima**: Seleziona la prima asta e clicca "Sposta Su"
- ? Nessuna azione, log: "L'asta è già in cima"
2. **In fondo**: Seleziona l'ultima asta e clicca "Sposta Giù"
- ? Nessuna azione, log: "L'asta è già in fondo"
3. **Nessuna selezione**: Clicca "Sposta Su" senza selezionare
- ? Messaggio: "Seleziona un'asta dalla griglia"
4. **Freccia Su in cima**: Premi freccia Su sulla prima asta
- ? Nessun movimento, rimane sulla prima
5. **Freccia Giù in fondo**: Premi freccia Giù sull'ultima asta
- ? Nessun movimento, rimane sull'ultima
---
## Casi d'Uso
### Scenario 1: Priorità Aste
**Problema**: Hai 10 aste ma alcune sono più importanti
**Soluzione**: Sposta le aste prioritarie **in cima** alla lista
### Scenario 2: Organizzazione per Categoria
**Problema**: Vuoi raggruppare aste simili (es. Shop, Buoni, Elettronica)
**Soluzione**: Riordina manualmente per categoria
### Scenario 3: Navigazione Rapida
**Problema**: Devi controllare rapidamente tutte le aste
**Soluzione**: Usa le **frecce Su/Giù** per scorrere velocemente
---
## Vantaggi
| Funzionalità | Vantaggio | Prima | Dopo |
|--------------|-----------|-------|------|
| **Navigazione Frecce** | Controllo rapido da tastiera | Solo mouse | ?? Frecce |
| **Riordinamento** | Lista personalizzata | Ordine fisso | ?? Riordinabile |
| **Persistenza** | Ordine salvato | N/A | ?? Auto-save |
| **UX** | Interfaccia intuitiva | N/A | ? Pulsanti chiari |
| **No Conflitti** | Frecce non alterano layout | Ridimensionava | ? Solo navigazione |
---
## Metriche
- **Frecce direzionali**: Gestione custom con e.Handled = true
- **Riordinamento**: O(1) - `ObservableCollection.Move()`
- **Salvataggio**: Automatico dopo ogni spostamento
- **UI Responsiveness**: Nessun lag o blocco
- **Conflitti**: Zero conflitti con GridSplitter
---
## Possibili Miglioramenti Futuri
- [ ] **Drag & Drop**: Trascina le aste con il mouse
- [ ] **Scorciatoie da tastiera**: `Ctrl+Up` e `Ctrl+Down` per spostare
- [ ] **Selezione multipla**: Sposta più aste contemporaneamente
- [ ] **Ordinamento automatico**: Per nome, prezzo, timer, ecc.
- [ ] **Gruppi/Cartelle**: Organizza aste in categorie
---
## Note di Sviluppo
### Perché Gestione Esplicita delle Frecce?
- ? **Previene conflitti** con GridSplitter
- ? **Controllo totale** sul comportamento
- ? **e.Handled = true** blocca propagazione
- ? **Compatibile** con altri componenti WPF
### Perché ObservableCollection.Move()?
- ? **Thread-safe** con UI binding
- ? **Notifica automatica** alla DataGrid
- ? **Performante** (O(1) complexity)
- ? **Built-in WPF** - nessuna dipendenza esterna
### Perché Pulsanti Senza Emoji?
- ?? **Compatibilità**: Funziona su tutti i sistemi
- ?? **Leggibilità**: Testo chiaro e immediato
- ?? **Professionalità**: Interfaccia pulita
- ?? **Accessibilità**: Migliore supporto screen reader
---
## Checklist Completamento
- [x] Navigazione con frecce Su/Giù
- [x] Fix conflitto GridSplitter
- [x] Pulsanti "Sposta Su" e "Sposta Giù"
- [x] Rimozione emoji dai pulsanti
- [x] Gestione casi limite (cima/fondo)
- [x] Salvataggio automatico ordine
- [x] Logging dettagliato
- [x] Messaggi utente chiari
- [x] Tooltip informativi
- [x] Compilazione senza errori
- [x] Documentazione completa
---
## Conclusioni
Questa feature migliora significativamente l'**usabilità** dell'applicazione, permettendo agli utenti di:
- Navigare rapidamente tra le aste con la **tastiera** senza conflitti con i GridSplitter
- Personalizzare l'**ordine** delle aste secondo le proprie preferenze
- Mantenere l'ordine **persistente** tra le sessioni
Il tutto con un'implementazione **pulita**, **performante**, **senza conflitti UI** e **ben documentata**! ??

View File

@@ -190,6 +190,8 @@
AddUrlClicked="AuctionMonitor_AddUrlClicked" AddUrlClicked="AuctionMonitor_AddUrlClicked"
RemoveUrlClicked="AuctionMonitor_RemoveUrlClicked" RemoveUrlClicked="AuctionMonitor_RemoveUrlClicked"
RemoveAllClicked="AuctionMonitor_RemoveAllClicked" RemoveAllClicked="AuctionMonitor_RemoveAllClicked"
MoveUpClicked="AuctionMonitor_MoveUpClicked"
MoveDownClicked="AuctionMonitor_MoveDownClicked"
AuctionSelectionChanged="AuctionMonitor_AuctionSelectionChanged" AuctionSelectionChanged="AuctionMonitor_AuctionSelectionChanged"
CopyUrlClicked="AuctionMonitor_CopyUrlClicked" CopyUrlClicked="AuctionMonitor_CopyUrlClicked"
OpenAuctionInternalClicked="AuctionMonitor_OpenAuctionInternalClicked" OpenAuctionInternalClicked="AuctionMonitor_OpenAuctionInternalClicked"