2008-12-10 9 views
3

Si j'ai deux objets, l'un étant la liste d'éléments, et l'autre ayant une propriété stockant l'élément sélectionné de l'autre liste, est-il possible de mettre à jour l'élément sélectionné par liaison dans WPF?Pouvez-vous lier l'élément sélectionné dans une zone de liste à un objet distinct dans WPF?

Disons que j'ai ces deux structures de données:

public class MyDataList 
{ 
    public ObservableCollection<Guid> Data { get; set; } 
} 

public class MyDataStructure 
{ 
    public Guid ChosenItem { get; set; } 
} 

Est-il possible de lier une zone de liste à une instance des deux objets afin que la propriété ChosenItem se définie par l'élément sélectionné de la zone de liste?

EDIT: Pour rendre les choses un peu plus claires, il peut y avoir de nombreuses instances de MyDataStructure, chacune avec un élément choisi dans MyDataList. La liste de données est commune à toutes les instances, et j'ai besoin d'un moyen de sélectionner un élément et de stocker cette sélection dans MyDataStructure.

Répondre

2

Je crois que vous devriez être en mesure de le faire (assurez-vous de déclarer l'espace de noms local):

<Window.Resources> 
    <local:MyDataStructure x:Key="mds1" /> 
</Window.Resources>  
<ListBox ItemsSource="{Binding Data}" SelectedValue="{Binding Source={StaticResource mds1} Path=ChosenItem}"/> 
+1

Oui, ça a marché. Est-il possible de faire sans utiliser la ressource statique? –

1

Faire ces deux propriétés à l'intérieur d'une seule classe (Juste pour simplifier la solution) et rendre le code prêt pour les biens événements ont changé

public class MyDataList : INotifyPropertyChanged 
{ 
    private Guid _choosen; 

    public ObservableCollection<Guid> Data { get; set; } 

    public Guid ChosenItem { 
     get 
     { 
      return _choosen; 
     } 
     set 
     { 
      _choosen = value; 
      PropertyChanged(this, new PropertyChangedEventArgs("ChosenItem")); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

créer une instance de cette classe et se lient à la DataContext du ListBox Maintenant, écrivez le code XAML ListBox comme ci-dessous. La liaison SelectedValue fait l'affaire ici.

<ListBox ItemsSource="{Binding Data}" SelectedValue="{Binding Path=ChosenItem}" x:Name="listBox"/> 
+0

Pas vraiment possible. Je pourrais avoir plusieurs éléments choisis dans différentes listes, où les éléments proviennent de la même source mais l'élément choisi sera différent. –

+0

Mais la capture utilise ici SelectedValue Binding. La DataArchitecture peut être de toute façon comme vous le vouliez. –

Questions connexes