이 스레드에서 : Can anybody provide any simple working example of the Conductor<T>.Collection.AllActive usage? 나는 대답의 일부를 가졌지 만 여전히 혼란 스럽습니다.ShellViewModel에서 ViewModels 참조가 있습니다. Caliburn.Micro
모든보기 모델을 내 ShellViewModel로 참조하여 ContentControls를 열고 닫을 수 있지만 모든 내용을 생성자에 삽입하지 않고 간단히 참조하고자합니다.
해답에서는 ShellViewModel의 생성자에 인터페이스를 삽입하는 것이 좋습니다. 그렇게하면 모든 인터페이스를 구현하는 클래스에 모든 ViewModel을 삽입해야합니까?
public MyViewModel(IMagicViewModelFactory factory)
{
FirstSubViewModel = factory.MagicallyGiveMeTheViewModelIWant();
SecondSubViewModel = factory.MagicallyGiveMeTheViewModelIWant();
ThirdSubViewModel = factory.MagicallyGiveMeTheViewModelIWant();
Items.Add(FirstSubViewModel);
Items.Add(SecondSubViewModel);
Items.Add(ThirdSubViewModel);
}
또한, 나는 내보기 모델의 인스턴스를 얻을 수> IoC.Get <을 거치지 않아도 싶습니다, 나는 내가 잘못 아니에요 경우는 IOC의의 원칙을 위반 생각합니다. 다른 몇 가지 예에서는 필요에 따라 새 viewModel을 만듭니다.하지만 이러한 경우에 IoC를 사용하는 이유는 무엇입니까? 특히 이러한 새로운 ViewModel 내부에 서비스를 주입해야하는 경우가 있습니다. 내 쉘보기에서
, I에 의해 내 껍질보기 모델에 바인딩 3 개 가지 영역과 레이아웃이 있습니다 Conductor.Collection.AllActive을 확장 내 ShellViewModel에서
<ContentControl x:Name="Header"
Grid.ColumnSpan="3"/>
<ContentControl x:Name="Menu"
Grid.Row="1"/>
<ContentControl x:Name="Main"
Grid.ColumnSpan="3"/>
를,이 같은 세 영역을 참조 :
public Screen Menu { get; private set; }
public Screen Header { get; private set; }
public Screen Main { get; private set; }
나는과 같이 변경할 수 있도록하고 싶습니다
:
Menu = Items.FirstOrDefault(x => x.DisplayName == "Menu");
Header = Items.FirstOrDefault(x => x.DisplayName == "Header");
Main = Items.FirstOrDefault(x => x.DisplayName == "Landing");
모든 ViewModel의 생성자에 DisplayName이 설정되어 있습니다.
내가 GetChildren하지만이 시도했다()
foreach (var screen in GetChildren())
{
Items.Add(screen);
}
내가 뭔가를 분명 실종 비어?
미리 감사드립니다.