如何在XAML中将用户控件绑定到外部对象?

时间:2011-09-03 15:22:36

标签: wpf xaml data-binding

我在用户控件中有一个图像,我想将它的可见性绑定到我在类对象中设置的属性。依赖项属性已设置并正常工作,但我不知道如何在图像上正确设置绑定。

用户控件和类对象位于同一名称空间中。我以为我需要将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是用户控件。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

我认为您应该考虑使用Model-View-ViewModel模式。而不是将DataContext设置为UserControl,而是将其设置为另一个类的实例(例如,ProgressViewModel)。此视图模型将具有您要绑定到的所有属性(包括您的DatabaseStepCompletedVisibility属性)并使其更容易。现在你想要将一些东西绑定到UserControl,将某些东西绑定到其他地方的其他对象等等。而且,正如您所发现的那样,使其变得困难。以下是更多信息:

http://jmorrill.hjtcentral.com/Home/tabid/428/EntryId/432/MVVM-for-Tarded-Folks-Like-Me-or-MVVM-and-What-it-Means-to-Me.aspx

如果不采用这种方法,您必须有一个要绑定的实例MigrateUserWizardObject。您可以将该实例放在UserControl中(如果您坚持将其用作DataContext),则可以绑定UserControl的MigrateUserWizardObject属性的属性。此外,您的MigrateUserWizardObject不必是要绑定的依赖项对象或依赖项属性。一个更好的模式是使它成为一个实现INotifyPropertyChanged接口的普通c#类。