我在UserControl
中擁有一個依賴屬性,其屬性名爲SelectedColor
。從我的主要的應用程序,使用此我的代碼窗口的看法是:將視圖模型的值發送到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;
中的行有關。是否正確的是,聲明這爲主應用中的此用戶控件的實例創建了一個全新的上下文,因此從視圖模型發送給它的任何值都將被重新初始化?如果是這樣,我怎麼能發送價值而不重新宣佈?我還需要DataContext = this
一行,因爲如果沒有它,我的UserControl
中的某些功能將不再起作用。
有沒有人遇到過這個?
在此先感謝!
'this.DataContext =這一點;'是癌症WPF MVVM。 [這篇文章解釋了爲什麼](http://blog.scottlogic.com/2012/02/06/a-simple-pattern-for-creating-re-use-usercontrols-in-wpf-silverlight.html)。你會注意到它有點長,但化療也是如此。 – Will