2009-04-08 8 views
0

J'ai créé deux UserControls, le premier affichant une liste d'objets, le second affichant des détails sur un objet sélectionné dans le premier. J'ai créé une propriété de dépendance sur le premier contrôle et lie chaque UserControl à un objet déclaré dans ma collection Resources. J'ai vu des articles de blog décrivant cela, mais je n'arrive pas à le faire fonctionner. J'obtiens une exception XamlParseException. Le plus drôle est que l'exception ne se produit que lorsque je mets la liaison Mode = TwoWay sur mes premiers UserControls. Voici le code ...Propriété de dépendances provoquant XamlParseException AG_E_PARSER_BAD_PROPERTY_VALUE

Page.xaml

<UserControl.Resources> 
    <local:Item x:Key="SelectedItem" /> 
</UserControl.Resources> 

... 

<controls:ItemList 
    SelectedItem="{Binding Mode=TwoWay, Source={StaticResource SelectedItem}}">      
</controls:ItemList > 

... 

<controls:ItemDetails 
    DataContext="{Binding Source={StaticResource SelectedItem}}">      
</controls:ItemDetails> 

ItemList.xaml.cs

public partial class ItemList: UserControl 
{ 
    public ItemList() 
    { 
     InitializeComponent(); 
    } 

    public static readonly DependencyProperty SelectedItemProperty = 
     DependencyProperty.Register("SelectedItem", typeof(Item), typeof(ItemList), new PropertyMetadata(new Item())); 
    public Item SelectedItem 
    { 
     get { return (Item)GetValue(SelectedItemProperty); } 
     set { SetValue(SelectedItemProperty , value); } 
    } 

Toutes les suggestions sont les bienvenues!

Répondre

2

Votre Xaml est incorrect, à première vue. Il vous manque une propriété à laquelle vous devez vous connecter pour deux voies. Vous dites que vous voulez lier à l'objet défini dans la source, mais vous ne spécifiez pas une propriété de cette ressource à lier à. Dans ce cas, la ressource SelectedItem est un objet de type Item ... vous devez lier à la propriété de Item. Donc, si l'article a une valeur nommée propriété, votre Xaml pourrait ressembler à ceci:

SelectedItem="{Binding Value, Source={StaticResource SelectedItem}, Mode=TwoWay}" 

Essayez ceci:

SelectedItem="{Binding SelectedItem, Mode=TwoWay}"  

ib.

+0

Bonne explication. Merci! –

Questions connexes