Я хочу установить для свойства пользовательского элемента управления значение свойства в родительском элементе управления. Например, допустим, у моего главного окна есть некоторые начальные данные конфигурации. В настоящее время я использую следующее в 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) .