문제

나는 MVVM으로 시작하고 일을 이해하기 시작했습니다. 나는 현재 Cinch 프레임 워크를 실험하고 있지만 아직 그것에 전념하고 있지는 않습니다.
뷰의 코드 비드에 대한 참조를 사용하여 뷰 모델을 뷰에 주입하고 속성에 [종속성]을 갖는 속성과 세터에서는 Unity를 사용하여 데이터 콘텍스트를 올바른 뷰로 설정합니다. 깔끔한 속임수, 나는 생각했다.

나는 앱을 단일 창으로 작동 시키려고 노력하고 있습니다 (여러 개의 창문과는 달리 닫는 것과는 달리 닫는 것과 달리)는 Windows에서 Usercontrols로 뷰를 변경하고 기본 창에 추가했습니다. XAML은 컨테이너를 사용하지 않기 때문에 뷰 모델이 주입되지 않았습니다. view를 만들기 위해 view를 만들기 위해 view를 생성하고 Resolve를 사용하여 Code-Behind에 수동으로 추가했을 때, [종속성]이 생성되었습니다. .

XAML을 통해 뷰를 추가하거나 UI 동작의 결과로보기가 변경되면 UI 동작 등이 변경되도록 창을 설정하려면 UNITY를 통해 마술을 작동시킬 수 있도록하는 방법은 무엇입니까?

도움이 되었습니까?

해결책

문제를 해결하는 방법은 viewmodels of usercontrols가 속성으로 노출되면서 뷰 모델도 갖도록 창을 만드는 것입니다. 그런 다음 창의 XAML에서 바인딩 메커니즘을 사용하여 UserControl의 DataContexts를 메인 뷰 모델의 적절한 특성에 바인딩합니다. 그리고 메인 뷰 모델은 유니티 컨테이너에서 해결되므로 필요에 따라 다른 모든 뷰 모델이 주입됩니다.

다른 팁

이 문제는 일반적으로 지역과 지역 관리자를 사용하여 해결됩니다. 기본 창 뷰 모델에서는 지역 세트가 생성되어 RegionManager에 추가됩니다. 그런 다음 ViewModels를 해결하고 grea.Views Collection에 추가 할 수 있습니다.

XAML에서,이 지역은 일반적으로 메인 뷰 모델의 영역 속성에 묶인 항목 통제의 항목 소스 속성을 갖도록하여 주입됩니다.

따라서 기본 화면 뷰 모델에서 다음과 같은 것이 있습니다.

    public class TestScreenViewModel
{
    public const string MainRegionKey = "TestScreenViewModel.MainRegion";

    public TestScreenViewModel(IUnityContainer container, IRegionManager regionManager)
    {
        this.MainRegion = new Region();
        regionManager.Regions.Add(MainRegionKey, this.MainRegion);
    }

    public Region MainRegion { get; set; }
}

이것은 당신의 imodule에서 정상적으로 해결됩니다

        #region IModule Members

    public void Initialize()
    {
        RegisterViewsAndServices();

        var vm = Container.Resolve<SelectorViewModel>();
        var mainScreen = Container.Resolve<TestScreenViewModel>();
        mainScreen.MainRegion.Add(vm);

        var mainView = ContentManager.AddContentView("Test harness", mainScreen);
    }

    #endregion

그리고 당신의 템플릿의 XAML 표현은

    <DataTemplate DataType="{x:Type TestModule:TestScreenViewModel}">
    <ScrollViewer ScrollViewer.VerticalScrollBarVisibility="Auto">
        <StackPanel>
            <ItemsControl ItemsSource="{Binding Path=MainRegion.Views}" />
        </StackPanel>
    </ScrollViewer>
</DataTemplate>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top