2010-06-26 5 views
0

J'ai un UserControl ...Reliure à UserControl dans WPF

XAML:

<UserControl x:Name="ClientsListControl" ....... > 
<Grid> 
    <ListBox Margin="10" DisplayMemberPath="Name" 
      Name="profilesListBox" 
      ItemsSource="{Binding ElementName=ClientsListControl, Path=Items}" /> 
</Grid> 
</UserControl> 

code derrière:

public partial class ClientsList : UserControl 
{ 
    public static DependencyProperty ItemsProperty = 
     DependencyProperty.Register("Items", typeof(ClientsListViewModel), typeof(ClientsList)); 

    public ClientsListViewModel Items 
    { 
     get 
     { 
      return (ClientsListViewModel) GetValue(ItemsProperty); 
     } 
     set 
     { 
      SetValue(ItemsProperty, value); 
     } 
    } 

    public ListBox ListBox 
    { 
     get 
     { 
      return profilesListBox; 
     } 
    } 

    public ClientViewModel SelectedItem 
    { 
     get 
     { 
      return (ClientViewModel) profilesListBox.SelectedItem; 
     } 
    } 

    public ClientsList() 
    { 
     InitializeComponent(); 
    } 
} 

... et la fenêtre.

Le problème est:

1) ceci ne fonctionne:

<cm:ClientsList x:Name="clientsList" Items="{Binding}" /> 
<TextBox Width="100" Height="20" Name="Bla" Text="{Binding ElementName=clientsList, Path=ListBox.SelectedItem.Name}" /> 

2) cela ne fonctionne pas:

<cm:ClientsList x:Name="clientsList" Items="{Binding}" /> 
<TextBox Width="100" Height="20" Name="Bla" Text="{Binding ElementName=clientsList, Path=SelectedItem.Name}" /> 
+0

Je ne comprends pas votre problème. Puisque SelectedItem est une propriété de ListBox, le premier code est valide à 100%. Puisque vous avez trouvé une solution à votre problème initial, qu'est-ce qui ne va pas avec le code non? 1 pour que vous préférez non. 2 dessus? – Andreas

+0

le premier code fonctionne correctement. la seconde ne provoque aucune réaction sur l'interface utilisateur –

Répondre

0

Faire SelectedItem une propriété de dépendance et lier la propriété SelectedItem de le ListBox comme vous l'avez fait avec Items.

XAML:

<Grid> 
    <ListBox Margin="10" DisplayMemberPath="Name" 
      Name="profilesListBox" 
      ItemsSource="{Binding ElementName=ClientsListControl, Path=Items}" 
      SelectedItem="{Binding ElementName=ClientsListControl, Path=SelectedItem}"/> 
</Grid> 

code derrière:

public static DependencyProperty SelectedItemProperty = 
     DependencyProperty.Register("SelectedItem", typeof(ClientViewModel), typeof(ClientsList)); 

public ClientViewModel SelectedItem 
{ 
    get { return (ClientViewModel)GetValue(SelectedItemProperty); } 
    set { SetValue(SelectedItemProperty, value); } 
} 
+0

Belle solution. Je vous remercie! –