我在用户控件中有一个图像,我想将它的可见性绑定到我在类对象中设置的属性。依赖项属性已设置并正常工作,但我不知道如何在图像上正确设置绑定。
用户控件和类对象位于同一名称空间中。我以为我需要将ElementName
设置为窗口,或者RelativeSource
设置为类对象,但我没有让它解决。
这是依赖属性的样子(在MigrateUserWizardObject.cs
中定义,它继承自DependencyObject
,它位于UserAccountMigrator
命名空间中):
public static readonly DependencyProperty DatabaseStepCompletedVisibilityProperty = DependencyProperty.Register("DatabaseStepCompletedVisibility", typeof(Visibility), typeof(MigrateUserWizardObject));
public Visibility DatabaseStepCompletedVisibility
{
get
{
return (Visibility)GetValue(DatabaseStepCompletedVisibilityProperty);
}
set
{
SetValue(DatabaseStepCompletedVisibilityProperty, value);
}
}
这是我想要绑定到此依赖项属性的图像(在ProgressUserControl.xaml
中定义,它继承自UserControl
,它也位于UserAccountMigrator
命名空间中):
<Image x:Name="DatabaseCompleted" Source="{StaticResource GreenCheckMarkSource}" Visibility="{Binding Path=DatabaseStepCompletedVisibility, UpdateSourceTrigger=PropertyChanged}" Height="20" HorizontalAlignment="Right"></Image>
这是因为图像的DataContext
是用户控件。我怎样才能做到这一点?
答案 0 :(得分:1)
我认为您应该考虑使用Model-View-ViewModel模式。而不是将DataContext设置为UserControl,而是将其设置为另一个类的实例(例如,ProgressViewModel)。此视图模型将具有您要绑定到的所有属性(包括您的DatabaseStepCompletedVisibility属性)并使其更容易。现在你想要将一些东西绑定到UserControl,将某些东西绑定到其他地方的其他对象等等。而且,正如您所发现的那样,使其变得困难。以下是更多信息:
如果不采用这种方法,您必须有一个要绑定的实例MigrateUserWizardObject。您可以将该实例放在UserControl中(如果您坚持将其用作DataContext),则可以绑定UserControl的MigrateUserWizardObject属性的属性。此外,您的MigrateUserWizardObject不必是要绑定的依赖项对象或依赖项属性。一个更好的模式是使它成为一个实现INotifyPropertyChanged接口的普通c#类。