2013-01-06 18 views
6

Ho due liste con diverso ItemsSource ma con SelectedItem legato alla stessa proprietà - "Nome".Deseleziona tutti gli elementi durante il SelectedItem è tenuto a qualcosa che non esiste nella lista

Per prima cosa scelgo l'elemento "c" nell'elenco di destra in modo che sia selezionato anche l'elemento "c" nell'elenco di sinistra.

Quindi ho selezionato un altro elemento nell'elenco di destra ma la "c" nell'elenco di sinistra è ancora selezionata. Capisco perché lo faccia, ma posso rendere deseleziona la "c" nella lista giusta?

enter image description here

XAML:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 

    <ListView SelectedItem="{Binding Name}" ItemsSource="{Binding lstNames1}"/> 
    <ListView SelectedItem="{Binding Name}" ItemsSource="{Binding lstNames2}" Grid.Column="1"/> 
</Grid> 

codice dietro:

public partial class selected : Window 
{ 
    public ObservableCollection<string> lstNames1 { get; set; } 
    public ObservableCollection<string> lstNames2 { get; set; } 

    public string Name { get; set; } 


    public selected() 
    { 
     Names1 = new ObservableCollection<string> {"a1", "b1", "c"}; 
     Names2 = new ObservableCollection<string> { "a2", "b2", "c" }; 
     InitializeComponent(); 
     DataContext = this; 
    } 
} 
+0

Così si vuole ancora "c" per essere selezionato in entrambe le liste, ma quando un elemento esiste in una sola lista cancellare il selction da l'altro? –

+0

sa_ddam213 - esattamente! :) – Erez

+0

Si prega di tenere presente che la finestra ha già una proprietà [Nome] (http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.name.aspx). Quindi il tuo nuovo creato è in conflitto con quello esistente. E la proprietà Name non contiene una notifica di modifica. – Clemens

risposta

7

Se si passa il SelectedItem legame SelectedValue questo si comporterà come si vuole, Il SelectedItem non è Clearing perché la sua non impostato su null perché l'altro elenco ha impostato un valore, SelectedValue agisce in modo un po 'diverso in quanto deve trovare un elemento o cancellerà il SelectedItem nell'elenco.

<ListView SelectedValue="{Binding Name}" ItemsSource="{Binding lstNames1}" /> 
<ListView SelectedValue="{Binding Name}" ItemsSource="{Binding lstNames2}" Grid.Column="1"/> 

Speranza che ha senso :)

enter image description here enter image description here

+0

Bellissimo, grazie. – Erez