2009-08-12 10 views
0

Les éléments de liste déroulante sont extraits d'une table, un champ sur lequel la liaison est établie. Après avoir enregistré dans la base de données l'élément sélectionné dans une autre table, je veux que l'élément sélectionné soit celui qui a été enregistré. Mais l'élément sélectionné est perdu. Donc, ma question est: puis-je lier la liste déroulante à deux DataContexts ou peut-être une autre solution? Pour donner un exemple plus clair: les éléments de la liste déroulante sont des valeurs prédéfinies provenant d'une source de données et la valeur sélectionnée doit être enregistrée et affichée sur l'interface. Donc, d'après ce que je peux voir doit être une liaison aux valeurs prédéfinies et aussi une liaison à la valeur enregistrée pour établir une connexion à l'élément sélectionné.liaison d'une zone de liste déroulante à DataContext différent

Une suggestion?

+0

Quelle technologie - je présume Winforms ou ASP.Net, mais ...? –

+0

Application WPF –

Répondre

1

Ioana, je ne semble pas obtenir ce que vous visez à ..
si vous prenez cette XAML:

<Window x:Class="WpfApplication4.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Window1" 
     Height="300" 
     Width="300"> 
    <StackPanel> 
     <TextBox Text="{Binding Path=SelectedText, Mode=TwoWay}" 
       Width="200"/> 
     <ComboBox Width="200" 
        VerticalAlignment="Center" 
        HorizontalAlignment="Center" 
        SelectedItem="{Binding Path=SelectedText, Mode=TwoWay}" 
        ItemsSource="{Binding Path=Texts, Mode=OneWay}"> 
     </ComboBox> 
    </StackPanel> 
</Window> 

et ce codebehind:

public partial class Window1 : INotifyPropertyChanged 
    { 
     public Window1() 
     { 
      InitializeComponent(); 
      this.Texts = new List<string>(new[] {"foo","bar"}); 
      this.DataContext = this; 
     } 

    private ObservableCollection<string> texts; 
    public ObservableCollection<string> Texts 
    { 
     get 
     { 
      return texts; 
     } 

     set 
     { 
      texts = value; 
      if (this.PropertyChanged != null) this.PropertyChanged(this, new PropertyChangedEventArgs("Texts")); 
     } 
    } 

    private string selectedText; 
    public string SelectedText 
    { 
     get 
     { 
      return selectedText; 
     } 

     set 
     { 
      selectedText = value; 
      if (this.PropertyChanged != null) this.PropertyChanged(this, new PropertyChangedEventArgs("SelectedText")); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

Vous n'avez les éléments et la base de données selectedValue.
Notez le INotifyPropertyChanged.
Est-ce ce que vous essayez d'atteindre?

+0

Bien que cela n'ait pas été demandé, si vous souhaitez également pouvoir mettre à jour les éléments, vous devez vous assurer que Texts envoie également un PropertyChangedEvent s'il est modifié. – wimh

+0

oui, j'ai modifié le code ... – Nils

Questions connexes