2011-07-29 6 views
7

Ho due usercontrols, il primo con una listbox associata a un elenco di clienti che visualizza alcuni dettagli semplici per ciascun cliente.WPF - Collega a selecteditem di listbox tra i controlli utente

Il secondo controllo utente Vorrei avere una visione più dettagliata di qualsiasi cliente selezionato nella casella di riepilogo del primo usercontrol.

È possibile impostare un'associazione nel secondo controllo per eseguire il bind sull'elemento selezionato nel primo controllo utente?

La mia casella di riepilogo:

  <ListBox Name="lstCustomer" ItemsSource="{Binding Customers}" >   
       <ListBox.Resources> 

        <DataTemplate DataType="{x:Type MyApplication:Customers}"> 
         <Label Grid.Row="0" Content="{Binding Customer.name}" FontSize="14" FontWeight="Bold" Padding="5" />        
           <Label Grid.Row="1" Grid.Column="0" Content="{Binding Customer.telephone}" Padding="10,5" />     
          </Grid> 
         </Grid> 

        </DataTemplate> 
       </ListBox.Resources> 
      </ListBox> 

Vista dettagliata Usercontrol (finora)

<Grid x:Name="containingGrid" DataContext="{Binding ElementName=lstCustomers, Path=SelectedItem}"> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Height="Auto"/> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="Auto"/> 
      </Grid.ColumnDefinitions> 
      <TextBlock Text="{Binding Customer.name}" FontSize="23"/> 
     </Grid> 

Grazie Greg

+1

Quello che hai dovrebbe funzionare se si cambia il TextBlock legame Text = "{nome} Binding". Ti suggerirei di cambiare "nome" in "Nome" nella dichiarazione di proprietà nel Cliente per identificarlo come una proprietà e far sì che segua alcune "regole!". – Dun

risposta

3

vorrei suggerire di avere una proprietà nel vostro ViewModel di oggetto Customer dicono SelectedCustomer e associarlo al SelectedItem del vostro listbox come questo -

<ListBox Name="lstCustomer" ItemsSource="{Binding Customers}" 
          SelectedItem = "{Binding SelectedCustomer}" >   
       . . . . . 
</ListBox> 

Dal momento che lei ha detto che entrambi i controlli utente sono in stessa vista, quindi presumo che condividano lo stesso ViewModel. In questo caso si può semplicemente impostare il contesto dati in questo modo -

<Grid x:Name="containingGrid" DataContext="{Binding SelectedCustomer}"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="Auto"/> 
    </Grid.ColumnDefinitions> 
    <TextBlock Text="{Binding Name}" FontSize="23"/> 
</Grid> 
1

Sì, è possibile - se si dà il listbox un nome di CustomerList quindi puoi associare alla sua proprietà SelectedItem utilizzando un'associazione come "{Binding ElementName = CustomerList, Path = SelectedItem}".

+1

@ Mark ... la soluzione funziona se entrambe le caselle di riepilogo sono nello stesso controllo utente. ma come per greg è molto chiaro che bth listbox sono in controllo utente diverso – Bathineni

+0

@greg .. stai usando entrambi i controlli utente in un altro controllo utente o finestra ..? se possibile prova a pubblicare il tuo codice xaml. atleast semplificato uno – Bathineni

+0

@bathineni Sì entrambi i controlli utente sono utilizzati nello stesso controllo utente e ci sarà sempre un'istanza alla volta. Ho postato l'xaml per il controllo utente della vista dettagliata nella mia domanda originale –