UserControl
に依存プロパティがあり、SelectedColor
というプロパティがあります。View ModelからUserControl依存プロパティに値を送信WPF
<controls:ColorPicker SelectedColor="{Binding MyCanvas.CanvasBackgroundColor}" />
とビューモデルからのコードは次のとおりです:私のメインアプリから、この私のコードを使用して、ウィンドウのビューがある
public MyCanvas { get; set; }
public MyWindowViewModel(MyCanvas myCanvas)
{
MyCanvas = myCanvas;
}
そして、私のユーザーコントロールのためのXAMLは次のとおりです。
<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>
とコードビハインド:
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));
コードバックの行に問題があると思いますDataContext = this;
。それは、メインのアプリケーションで、このユーザーコントロールのインスタンスのための全く新しいコンテキストを作成することを宣言し、したがって、ビューモデルから送信された値は再初期化されるのは間違いありませんか?もしそうなら、どうやって再宣言しなくても値を送ることができますか? 行が必要な場合は、UserControl
内の一部の機能が動作しなくなります。
誰もこれまでに遭遇したことはありますか?
ありがとうございます!
'this.DataContext =この;'の癌でありますWPF MVVM。 [この記事ではその理由を説明します(http://blog.scottlogic.com/2012/02/06/a-simple-pattern-for-creating-re-useable-usercontrols-in-wpf-silverlight.html)。あなたはそれがちょっと長いことに気づくでしょうが、化学療法もそうです。 – Will