실행은 잘 되고 있지만 해당 페이지 데이터 바인딩 중 경고가 발생을 하였는데 어느 부분을 보면 될까요?.
비하인드 코드에 해당 모델을 DataContext에 할당 및 app.xaml에 뷰 모델 등록을 잘 해두었습니다.
해당 예제는 net5.0 기준으로 작성 되었고 저의 프로젝트는 net8.0 기준으로 설정 하여 작성하고 있습니다.
net 버전을 올리면서 필요한 네임스페이스가 빠졌을까요?
실행은 잘 되고 있지만 해당 페이지 데이터 바인딩 중 경고가 발생을 하였는데 어느 부분을 보면 될까요?.
비하인드 코드에 해당 모델을 DataContext에 할당 및 app.xaml에 뷰 모델 등록을 잘 해두었습니다.
해당 예제는 net5.0 기준으로 작성 되었고 저의 프로젝트는 net8.0 기준으로 설정 하여 작성하고 있습니다.
net 버전을 올리면서 필요한 네임스페이스가 빠졌을까요?
우선 상세 코드가 없어서 모르겠는데, wpf를 디버깅하는 도구중에 snoop이라는 도구가 있습니다.
wpf개발자는 몰라선 안되는 중요한 도구인데 그걸로 데이터컨텍스트에 어떤 객체가 바인딩 되어있는지 먼저 확인해보시면 경험에 도움이 되실듯 합니다.
댓글 주셔서 감사합니다.
이 네임스페이스 두줄로 경고가 사라지는 것을 확인했습니다.
xmlns:viewmodels=“clr-namespace:Wpf_MvvmFramework.ViewModels”
d:DataContext=“{d:DesignInstance Type=viewmodels:MainViewModel}”
뷰모델 네임스페이스를 추가 해보니 제대로 바인딩 되는 것 같습니다.
알려주신 snoop 도구도 사용 해 보도록 하겠습니다.
감사합니다.
일반적인 WPF 뷰(Page
, Window
, UserControl
클래스)는 ~~~~.xaml
파일과 ~~~~.xaml.cs
파일로 구성되어 있으며, 이 두 요소는 컴파일되어 실행되기 전인 디자인 타임(design-time)에는 서로 독립적인 요소입니다.
따라서 디자인 타임에는 XAML 편집기가 ~~~~.xaml
파일의 코드비하인드인 ~~~~.xaml.cs
에서 설정한 DataContext
정보를 알 수 없습니다.
올려주신 내용을 보면 HomePage
뷰의 DataContext
가 HomeViewModel
클래스일 것으로 예상되지만, XAML 편집기는 이를 인지하지 못하므로 (실제 실행 시 오류는 아니지만) DataContext
에서 Title
속성을 찾을 수 없다는 디자인 타임 오류 메시지를 출력하게 됩니다. 또한, 바인딩 관련 자동완성 기능도 정상적으로 동작하지 않게 됩니다.
이 문제를 해결하려면 디자인 타임에 해당 뷰의 DataContext
가 어떤 타입인지 XAML 편집기에 명시적으로 알려줘야 합니다.
예를 들어, HomeViewModel
클래스가 Wpf_MvvmFramework.ViewModels
네임스페이스에 정의되어 있다고 가정하면, 아래와 같이 XAML에 두 줄을 추가하면 됩니다.
<Page x:Class="Wpf_MvvmFramework.Views.HomePage"
...
xmlns:vm="clr-namespace:Wpf_MvvmFramework.ViewModels"
d:DataContext="{d:DesignInstance {x:Type vm:HomeViewModel}}">
...
(주의 할 점은 DataContext
속성이 아닌 앞에 d:
네임스페이스가 붙는 d:DataContext
속성이라는 것)
이처럼 최상위 요소 뿐만 아니라 XAML 편집기가 DataContext
의 타입을 추정할 수 없는 구간에 d:DataContext
속성을 적절히 지정해 주시고, DataTemplate
을 정의할 때도 DataType
속성을 명시적으로 지정해주시면 불편한 오류메시지도 사라지고 디자인 타임에서도 바인딩 대상 속성을 인식할 수 있어 보다 편리하게 XAML 코드를 작성할 수 있습니다.
이상입니다.
앗!! 감사합니다.
목 멕히던게 뻥 뚫리는 느낌입니다.
감사합니다