J'ai une propriété de dépendance dans un UserControl
avec une propriété appelée SelectedColor
. De mon application principale, la vue de la fenêtre qui utilise mon code est:Envoyer la valeur du modèle View à la propriété de dépendance UserControl WPF
<controls:ColorPicker SelectedColor="{Binding MyCanvas.CanvasBackgroundColor}" />
Et le code du modèle de vue est:
public MyCanvas { get; set; }
public MyWindowViewModel(MyCanvas myCanvas)
{
MyCanvas = myCanvas;
}
Et puis le XAML pour mon UserControl est:
<UserControl . . .>
<Button Click="Button_Click">
<Button.Style>
<Setter Property="Background" Value="Transparent" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{Binding SelectedColor}" BorderBrush="Black" BorderThickness="1" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
</Button>
</UserControl>
Et le code-behind:
public ColorPicker()
{
InitializeComponent();
DataContext = this;
}
public SolidColorBrush SelectedColor
{
get { return (SolidColorBrush)GetValue(SelectedColorProperty); }
set { SetValue(SelectedColorProperty, value); }
}
public static readonly DependencyProperty SelectedColorProperty =
DependencyProperty.Register(nameof(SelectedColor), typeof(SolidColorBrush), new UIPropertyMetadata(null));
Je pense que le problème pourrait être avec la ligne dans le code derrière DataContext = this;
. Est-il correct que déclarer cela crée un contexte entièrement nouveau pour l'instance de ce contrôle utilisateur dans l'application principale et donc toutes les valeurs qui lui sont envoyées à partir du modèle de vue seront ré-initialisées? Si oui, comment puis-je envoyer la valeur sans qu'elle soit re-déclarée? J'ai aussi besoin de la ligne DataContext = this
car sans cela, certaines fonctionnalités de mon UserControl
ne fonctionneront plus.
Est-ce que quelqu'un a déjà rencontré ça?
Merci d'avance!
'this.DataContext = ceci:' est le cancer WPVM MVF. [Cet article explique pourquoi] (http://blog.scottlogic.com/2012/02/06/a-simple-pattern-for-creating-re-useable-usercontrols-in-wpf-silverlight.html). Vous remarquerez que c'est un peu long, mais la chimiothérapie aussi. – Will