Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何在XAML中从用户控件绑定到外部对象?_Wpf_Xaml_Data Binding - Fatal编程技术网

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

Wpf 如何在XAML中从用户控件绑定到外部对象?,wpf,xaml,data-binding,Wpf,Xaml,Data Binding,我在用户控件中有一个图像,我想将它的可见性绑定到我在类对象中设置的属性。依赖项属性已设置并正常工作,但我不知道如何在图像上正确设置绑定 用户控件和类对象位于同一命名空间中。我想我需要将ElementName设置为窗口,或者将RelativeSource设置为类对象,但我无法解决这个问题 以下是依赖项属性的外观(在MigrateUserWizardObject.cs中定义,它继承自DependencyObject,它位于UserAccountMigrator命名空间中): 下面是我希望绑定到此依赖

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

用户控件和类对象位于同一命名空间中。我想我需要将
ElementName
设置为窗口,或者将
RelativeSource
设置为类对象,但我无法解决这个问题

以下是依赖项属性的外观(在
MigrateUserWizardObject.cs
中定义,它继承自
DependencyObject
,它位于
UserAccountMigrator
命名空间中):

下面是我希望绑定到此依赖项属性的映像(在
ProgressUserControl.xaml
中定义,它继承自
UserControl
,也位于
UserAccountMigrator
命名空间中):



这是因为图像的
DataContext
是用户控件。我如何才能做到这一点?

我认为您应该研究使用模型-视图-模型模式。与其将DataContext设置为UserControl,不如将其设置为另一个类的实例(例如ProgressViewModel)。此视图模型将具有您想要绑定到的所有属性(包括DatabaseStepCompletedVisibility属性),并使其更加容易。现在,您希望将一些内容绑定到UserControl,将一些内容绑定到其他地方的另一个对象,等等。。而且,正如你所发现的,这让它变得困难。详情如下:


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

能否显示完整的标记?从你的描述很难理解。当然。我希望这将是一个简单的答案,因为我只是一个新的绑定。谢谢你的简单和有用的文章!遵循MVVM比我最初做的要简单得多。
public static readonly DependencyProperty DatabaseStepCompletedVisibilityProperty = DependencyProperty.Register("DatabaseStepCompletedVisibility", typeof(Visibility), typeof(MigrateUserWizardObject));

public Visibility DatabaseStepCompletedVisibility
{
    get
    {
        return (Visibility)GetValue(DatabaseStepCompletedVisibilityProperty);
    }
    set
    {
        SetValue(DatabaseStepCompletedVisibilityProperty, value);
    }
}
<Image x:Name="DatabaseCompleted" Source="{StaticResource GreenCheckMarkSource}" Visibility="{Binding Path=DatabaseStepCompletedVisibility, UpdateSourceTrigger=PropertyChanged}" Height="20" HorizontalAlignment="Right"></Image>