2010-12-29 2 views
1

사용자 정의 컨트롤 속성을 부모 컨트롤의 속성 값으로 설정하려고합니다. 예를 들어, 내 메인 윈도우 컨트롤에 초기 구성 데이터가 있다고 가정 해 봅시다. 현재 나는 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 하나 (구성) :

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); } 
    }  
    } 
} 

정말 변경 사항을 관찰 할 필요가 없습니다. 생성시 사용자 컨트롤에 데이터를 전달하기 만하면됩니다. 이 중 적어도 하나에 대해 간단한 속성을 사용하여 할 수 있습니까 또는이 (한 번) 초기화를 수행하려면 두 종속성 속성을 사용해야합니까?

업데이트 :을 MyUserControl 클래스에서 종속성 속성을 제거하고 간단한로 교체 만 가능했던 경우 지금

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

: 제이의 솔루션은 MainWindow를 클래스에 단지 CLR 속성을 우리에게 남긴다 여전히 XAML 바인딩 (또는 일부 다른 XAML 메커니즘을 통해 초기화되므로 XAML을 통해 데이터 소스를 전달할 수 있음).

+0

UserControl의 MyUserControlConfig 속성은 종속성 속성 일 필요는 없지만 일반 CLR 속성은 정상적으로 작동합니다. Dependency Property는 속성을 다른 것으로 바인딩하고자 할 때만 필요하므로 Config는 DP –

+0

@Meleak이어야합니다. 역으로 생각합니까? 'ConfigProperty'는 DP이어야하고'MyUserControlConfigProperty'는 필요하지 않습니다. 왜냐하면 전자는 후자에 바인딩하기 때문입니다. – Jay

+0

@Jay : 사실 그것은 :) 다시 질문을보고 내 의견을 업데이트했습니다. –

답변

1

내가 실수 일 수 있지만 다른 클래스의 CLR 속성에 바인딩 할 수 있으면 MainWindow 클래스의 CLR 속성에 바인딩 할 수 있습니다.

시도해 보셨습니까?

+0

메인 윈도우에서 공용으로 자동으로 정의 된 속성을 사용하려고했습니다. UserControlConfig MyUserControlConfig {get; }; MainWindow의 생성자에서 초기화되었습니다. 그러나 코드가 오류없이 컴파일되었지만 MyUserControl의 Config 속성은 값으로 설정되지 않았습니다 (즉, null로 유지됨). UserControlConfig를 MainWindow의 종속성 속성으로 만들었을 때만 Binding 작업을 통해 값을 전달했습니다. 어쩌면 내가 뭔가 잘못하고있는 걸까요? –

+0

MainWindow 속성을 MainWindow 생성자에서 초기화 된 일반 자동 생성 속성으로 만들려고했는데 실제로 작동합니다. 내가 마지막으로 시도한 것을 엉망으로 만들었어야합니다. 당신의 도움을 주셔서 대단히 감사합니다! –

관련 문제