Je suis en train d'effectuer une nouvelle mise à l'échelle des données dans un convertisseur de valeurs chaque fois qu'un panneau est redessiné. Je veux déplacer une partie de ce traitement vers le viewmodel car la plus grande partie du traitement ne se produit que si la taille du contrôle ou quelques autres propriétés changent.WPF: Liaison à la propriété readonly dans le code
Pour que les données rééchelonnées semblent acceptables, j'ai besoin du ActualWidth
du conteneur dans le modèle de vue. Je veux le lier à une propriété du viewmodel d'une manière, donc quand il change, je peux déclencher le traitement de redimensionnement. Tous les exemples que j'ai pu trouver lient une CLR ou une propriété de dépendance à un élément plutôt qu'à l'autre et il me manque clairement quelque chose pour comprendre comment je devrais le faire. J'ai essayé plusieurs choses pour mettre en place la reliure mais je ne comprends pas.
Des indices? Merci.
En MyView XAML:
<myItemsControl/>
Dans le code MyView derrière, quelque chose comme:
Binding b = new Binding(MyWidthProperty);
b.Mode = BindingMode.OneWay;
b.Source = myItemsControl.Name;
.........?
et
public static readonly DependencyProperty MyWidthProperty =
DependencyProperty.Register("MyWidth", typeof(Double), typeof(MyViewModel));
En MyViewModel:
public Double MyWidth{
get { return _myWidth; }
set { _myWidth = value; ViewChanged(this); } }
je lirais un peu plus sur DependencyProperty. En particulier, votre objet doit être un objet DependencyObject et vous devez utiliser les méthodes GetValue et SetValue pour accéder à la valeur sous-jacente. Enfin, vous n'obtiendrez pas d'appel de setter lorsque le système de liaison accède au point d'accès (ce point est facile à manquer). Vous devrez donc passer un gestionnaire modifié dans le cadre de l'appel Register. –