2010-04-23 4 views
3

데이터 바인딩을 사용하여 WPF 프레임의 초기 내용을 설정할 수 있지만 이후에 바운드 속성 (INotifyPropertyChange를 사용하여 구현 됨)을 변경하면 내용이 변경되지 않는 것 같습니다.WPF 프레임의 Content 속성으로 데이터 바인딩을 사용할 수 있습니까?

또한이 방법으로 Content 속성에 직접 바인딩하면 바인딩 된 항목이 Frame 또는 NavigationWindow의 저널에 표시 될 것입니다.

일부 컨텍스트 : NavigationService를 사용하여 프레임과 상호 작용해야하지만 MVVM 패턴을 따르려고한다는 것을 알고 있습니다. Content 속성에 데이터 바인딩하는 것이 훨씬 간단 해 보이는 것 같습니다.

답변

3

WPF 커뮤니티의 많은 사람들이 기본 제공 탐색 프레임 워크가 손상되었다는 데 동의합니다. 그러나이를 사용하더라도 Content 속성을 바인딩하는 것은 올바른 방법이 아닙니다. 탐색 기능과 함께 MVVM을 사용하려면 ViewController 패턴과 결합하여 ViewModel이 컨트롤러에 탐색 요청을 전달한 다음 컨트롤러가 요청을 해결해야합니다. 앞에서 언급했듯이 많은 개발자가 WPF의 기본 제공 탐색을 사용하기 때문에이 개념을 사용할 수있는 예는 많지 않습니다.

WPF에 대한 매우 강력한 탐색 엔진을 보려면 look at nRoute WPF에 대한 MVC 라우팅 엔진의 포트입니다.

0

프레임은 탐색 호스트이므로 NavigationService를 사용하여 다른 콘텐츠를 탐색하는 것이 더 정확합니다. INotifyPropertyChange를 사용하면 내용이 변경 될 때마다 관련 이벤트를 호출한다고 가정합니다. 그런 다음 NavigationService를 대신 사용하는 것이 어렵지 않다고 가정합니다.

5

프레임에 대해 데이터 바인딩을 사용할 수 있지만 바인딩의 모드가 TwoWay로 설정되어 있는지 확인해야합니다.

XAML :

<Frame Content={Binding Path=MyProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged} /> 

보기 모델 : 내가 몇 일 전에이 문제로 실행

public class MyViewModel : INotifyPropertyChanging, INotifyPropertyChanged 
{ 
    public Page MyProperty 
    { 
    get 
    { 
     return _viewModelPage; 
    } 

    set 
    { 
     this.OnPropertyChanging("MyProperty"); 
     _viewModelPage = value; 
     this.OnPropertyChanged("MyProperty"); 
    } 
    } 
} 
0

. 프레임이있는 메인 윈도우가 있고 프레임에 다른 페이지를로드했습니다 (Navigate() 사용). 페이지의 데이터 바인딩이 손상되어로드 된 페이지에 데이터가 표시되지 않았습니다.

바인딩을 복구하려면 기존 DataContext을 프레임 안의 페이지로 만들거나 바인딩을 다시 적용하십시오.