2013-08-20 9 views
0

그래서, 난 내 자신의 하위 클래스 ChildView (나는 정말 괜찮은 이름을 가지고 올 수 없다), 나는 창문에 컨테이너 안에 표시하고 싶습니다, 나는 많은 이러한 종류의 UserControl과 창은 모두이를 보여줄 수 있어야합니다. 된 UserControls이처럼 내 서브 클래스를 구현 한 :데이터 바인딩을 사용자 정의 UserControl

<src:ChildView x:Class="(namespace).LoginView" [...]> 
public partial class LoginView : ChildView 

그리고 나는 그렇게처럼 내 창에 추가하는 것을 시도했다 :

<Grid x:Name="ViewHolder" Grid.Column="1" Grid.Row="1"> 
     <src:ChildView DataContext="{Binding CurrentView}" /> 
</Grid> 
private ChildView _currentView; 
public ChildView CurrentView 
{ 
    get { return _currentView; } 
    set 
    { 
     if (_currentView == value) 
      return; 

     _currentView = value; 
     smLog.Trace("View set to {0}", value.GetType().Name); 
     NotifyPropertyChanged("CurrentView"); 
    } 
} 

그러나 이것은 wo가 아닙니다. rk. CurrentView를 설정할 때 컨테이너에 아무 것도 표시되지 않습니다. 출력에 바인딩에 문제점을 나타내는 오류 메시지가 없습니다. 창에있는 다른 데이터 바인딩이 작동합니다.

<Grid x:Name="ViewHolder" Grid.Column="1" Grid.Row="1"> 
     <src:LoginView /> 
</Grid> 

내가 종속성 속성에 대한 몇 가지를 읽었습니다하지만 난 여기에 하나를 필요가 있다고 생각하지 않습니다 나는 즉는 XAML에서 직접 클래스를 지정하여 내 ChildViews을 사용할 수 있습니까? 어쨌든 하나를 구현하려고했지만 도움이되지 않았다. 아마도 실수를했지만, 내 머리를 감쌀 수 없었다. ...

내 질문에; 종속성 속성이 필요합니까? 그렇다면 어떻게 구현합니까? 그렇지 않은 경우 문제가 무엇입니까?

+0

에보기를 결합하는 것 때문에. 그것은 wpf 유틸리티이며 매우 유용한 당신의 컨트롤이 눈금에 존재하는지 확인하는 데 매우 유용합니다. – Eugene

+0

Snoop에 따르면 ViewHolder에 "[007] ChildView 2"가 포함되어 있으며 해당 속성을 검사하면 DataContext가 녹색으로 강조 표시됩니다. "[(네임 스페이스) .LoginView] {경로 = 현재보기}". IsInitialized, IsLoaded, IsVisible, IsEnabled 모두 참입니다 ... 높이와 너비는 적당한 값을가집니다. – moggizx

답변

1

자식의 DataContext를 변경해도 상관 없습니다 이 바인딩 된 데이터가 아니라 변경하려고합니다. 실제 뷰를 포함하는 자리 표시 자 컨트롤을 추가해야합니다. WPF에는 이런 것이 내장되어 있습니다. ContentControl을 살펴보십시오.

변경 그리드를가`snoop`을 시도하는 대신 ChildView의 ContentControl을을 (가) 포함하고, 컨트롤의 Content 속성

<Grid> 
    <ContentControl Content="{Binding CurrentView}"/> 
</Grid> 
+1

아, 네 말이 맞아. 고마워! – moggizx