2010-01-25 10 views
2

Je rencontre un problème avec l'analyseur xaml ne pas aimer ma déclaration de liaison, mais je ne vois rien de mal à la déclaration.Avoir un problème avec CoverterParameter Binding dans silverlight

valeur d'attribut non valide {Binding VehicleSpeed, ConverterParameter = {Binding InMiles}, Converter = {StaticResource SpeedConverter}, mode = TwoWay} pour les biens DataMemberBinding

VehicleSpeed ​​et InMiles sont des paramètres sur la classe que je avoir dans la propriété DataContext de la grille de niveau supérieur xaml du document xaml.

Cette instruction utilisée pour fonctionner sans ConverterParameter par elle se plaint maintenant après avoir ajouté la deuxième liaison aux "bool InMiles" que j'essaye de passer au ValueConverter.

Si quelqu'un peut voir quelque chose de mal avec cette ligne s'il vous plaît faites le moi savoir.

+0

le design est un peu déconcertant. Soit la propriété 'InMiles' indique « S'il vous plaît afficher la vitesse en milles par heure » ou cela signifie « la valeur actuelle dans le 'VehicleleSpeed' prorperty est en unités de Miles par heure ".Quel est-il ?. Aussi quel est le type de données de' VehicleSpeed' et w Quel type de contrôle êtes-vous obligé? – AnthonyWJones

Répondre

3

Vous ne pouvez pas lier le paramètre de conversion, car il ne s'agit pas d'une propriété de dépendance de l'objet de liaison.

Au lieu de cela vous pouvez passer toute donnée au convertisseur et utiliser sa méthode VehicleSpeed ​​ et InMiles propriétés dans le Convert().

+0

Je ne sais pas comment cela fonctionnerait pour une liaison TwoWay? – AnthonyWJones

+0

Oui. Ce sera difficile avec la liaison de données TwoWay. Peut être un CellTemplate personnalisé doit être utilisé pour cette colonne. – ligaz

+0

Comment passeriez-vous l'ensemble de l'élément de données au convertisseur? Est-ce dans la liaison primaire? –

1

Je ne suis pas sûr que vous pouvez utiliser DataBinding pour un paramètre de convertisseur. Je pense plutôt que vous devriez passer dans l'objet lié et accéder aux propriétés à partir de là.

0

Blockquote Au lieu de cela vous pouvez passer toute donnée au convertisseur et utiliser ses propriétés VehicleSpeed ​​et InMiles dans la méthode Convert(). Blockquote

Oui, il est peut être bonne approche, mais parfois vous avez l'objet qui n'est pas changé, seules les propriétés de cet objet modifié (via INotifyPropertyChanged).

Donc, si vous aimez cette

<Grid DataContext={Binding Model}> 
<MyControl SomeProperty={Binging, converter={staticResourse ConverterWhichTakesViewModel}/> 
</Grid> 

changements dans les propriétés du modèle ne sera pas avoir un impact sur MyControl, parce que le modèle ne change pas.

Il serait agréable d'avoir quelque chose comme ça:

<Grid DataContext={Binding Model}> 
    <MyControl SomeProperty={Binging Model.MyProperty, converter={staticResourse ConverterWhichTakesViewModel}, ConverterParameter ={Bindging}/> 
</Grid> 

Mais il ne fonctionne pas ...- (((Exception:. Le fonctionnement est pas valide en raison de l'état actuel de la objet

Toute pensée à ce sujet?