2012-11-23 3 views
6

Quando si associa l'oggetto selezionato di Combobox a una proprietà, normalmente verrà utilizzato il metodo Equals del tipo di oggetto per determinare l'elemento selezionato che deve essere visualizzato nella vista ComboBox. (vedi this question, per esempio)Comparatore di uguaglianza personalizzato per WPF ComboBox

E 'possibile avere un mio comparatore per questo, senza dover modificare il metodo della classe' equals? La ragione per cui non voglio modificare direttamente il metodo è perché la classe è usata anche per la logica di business e non voglio che il mio comparatore di uguaglianza influenzi altre cose che usano la stessa classe

+0

puoi creare un'altra classe derivata dalla classe principale? –

+0

@DJ ma non riesco a controllare quale implementazione è stata passata al mio viewmodel –

+0

Che ne dici di usare 'SelectedIndex' invece di' SelectedItem'. Quindi puoi mettere la tua logica di confronto personalizzata per trovare l'indice dell'articolo nel modello di vista. – Lubo

risposta

1

Il motivo per cui non lo faccio 't vuole modificare il metodo è direttamente perché la classe è utilizzata anche per la logica di business e non voglio che la mia uguaglianza di confronto di influenzare le altre cose che utilizzano la stessa classe

Questo di solito indica un involucro che è necessario :

public class Wrapper<T> 
{ 
    public override string ToString() { ... } 

    public override bool Equals(object obj) { ... } 

    public T UnderlyingRecord { get; set; } 
} 

In questo modo è possibile continuare normalmente e solo la vista utilizzerà l'oggetto wrapper.