문제

나는 "MVVM 주위에 머리를 감싸려고 노력하고 있습니다. 많은 것을 이해하지만 한 가지 측면을 이해하는 데 어려움이 있습니다. DataContext 설정.

특정 객체와 함께보기를 보여주고 싶습니다. 사용자는 보이는 것을 결정하지 않으므로 코드에서보기를 만들어야합니다. 그런 다음 뷰의 데이터 콘텍스트를 객체 (바인딩)로 설정하고 싶습니다. 나는 이것에 대한보기에 코드를 넣지 않으려 고 노력하고 있지만 View.layoutroot.datacontext는 공개되지 않습니다.

내가 무엇을 놓치고 있습니까?

이것을 피하려고 :

public class View
{
    public View(object dataContext)
    {
        InitializeComponent();
        LayoutRoot.DataContext = dataContext;  
    }
}

다음과 같은 것 :

public class ViewModel
{
    ...

    public UIElement GetView()
    {
        UIElement *element = new View();
        element.LayoutRoot.DataContext = element;
        return element;
    }
}
도움이 되었습니까?

해결책

보기는 뷰 모델에 대해 알아야한다는 것을 잊지 마십시오.

따라서 귀하의 경우 뷰 모델에 코드를 넣어보기를 생성하는 것이 가장 좋은 방법이 아닙니다.

조쉬 스미스 기사 MVVM은 a 부분 뷰 모델에 뷰를 적용 할 때. 그는 WPF의 DataTemplates를 사용하여 XAML에서 귀하의보기를 선택하는 것이 좋습니다.

다른 팁

XAML 컨트롤 또는 창 (MVVM을 사용하는 경우)을 사용하는 경우 LayouTroot (기본적으로 그리드)가 공개됩니다. 예에서 볼 때 일반 클래스 만 사용하므로 무슨 일이 일어나고 있는지 말하기는 어렵습니다.

또한 두 번째 Cameron의 의견 - View 또는 ModelView는 DataContext 할당을 처리해야합니다. 다양한 방식으로 수행 할 수 있지만 (DataTemplate, 종속성 주입, 특수 빌더 클래스, 일반 코드) 일반적으로 응용 프로그램 수준에서 발생합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top