Связывание пользовательского элемента управления с именованным родительским свойством - PullRequest
1 голос
/ 29 декабря 2010

Я хочу установить для свойства пользовательского элемента управления значение свойства в родительском элементе управления. Например, допустим, у моего главного окна есть некоторые начальные данные конфигурации. В настоящее время я использую следующее в XAML:

<Window x:Class="MyProject.MainWindow"
        x:Name="TopWindow" ... >
  ...
  <local:MyUserControl Config="{Binding ElementName=TopWindow,
                                Path=MyUserControlConfig, Mode=OneTime}" />
</Window>

Но для этого требуется два свойства зависимости, одно в MainWindow (MyUserControlConfig):

namespace MyProject
{
  public partial class MainWindow: Window
  {
    public static readonly DependencyProperty MyUserControlConfigProperty=
      DependencyProperty.Register("MyUserControlConfig", 
        typeof(UserControlConfig), typeof(MainWindow));

    public UserControlConfig MyUserControlConfig
    {
      get { return (UserControlConfig) 
        GetValue(MyUserControlConfigProperty); }
      set { SetValue(MyUserControlConfigProperty, value); }
    }    
  }
}

и один в MyUserControl (Config):

namespace MyProject
{
  public partial class MyUserControl: UserControl
  {
    public static readonly DependencyProperty ConfigProperty=
      DependencyProperty.Register("Config", 
      typeof(UserControlConfig), typeof(MainWindow));

    public UserControlConfig Config
    {
      get { return (UserControlConfig) GetValue(ConfigProperty); }
      set { SetValue(ConfigProperty, value); }
    }    
  }
}

Мне действительно не нужно наблюдать никаких изменений, просто чтобы передать данные в мой пользовательский контроль во время создания. Можно ли это сделать, используя простые свойства хотя бы для одного из двух, или я должен использовать два свойства зависимости для выполнения (однократной) инициализации?

Обновление : решение Джея оставляет нам только свойство CLR в классе MainWindow:

namespace MyProject
{
  public partial class MainWindow: Window
  {
    public UserControlConfig MyUserControlConfig {get; private set;}
    ...
  }
}

Теперь, если было просто возможно удалить свойство зависимостей из класса MyUserControl и заменить его простым свойством, которое все еще инициализируется через привязку XAML (или какой-либо другой механизм XAML, поэтому я могу передать источник данных через XAML) .

1 Ответ

1 голос
/ 29 декабря 2010

Я могу ошибаться, но если вы можете связать со свойствами CLR в других классах, я ожидаю, что вы можете связать со свойством CLR в своем MainWindow классе.

Вы пробовали это?1004 *

...