Как привязать пользовательский элемент управления к внешнему объекту в XAML? - PullRequest
0 голосов
/ 03 сентября 2011

У меня есть изображение внутри пользовательского элемента управления, которое я хочу связать его видимость со свойством, которое я настроил в объекте класса.Свойства зависимостей установлены и работают правильно, но я не знаю, как правильно установить привязку для изображения.

Пользовательский элемент управления и объект класса находятся в одном пространстве имен.Я подумал, что мне нужно будет установить 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 Ответ

1 голос
/ 04 сентября 2011

Я думаю, вы должны изучить использование модели 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), тогда вы можете связать свойство MigrateUserWizardObject со свойством UserControl. Кроме того, ваш MigrateUserWizardObject не обязательно должен быть объектом зависимости или свойством зависимости для привязки. Лучшим вариантом было бы сделать его простым классом c #, который реализует интерфейс INotifyPropertyChanged.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...