다른보기에서 사용하는 환자 목록의 사용자 컨트롤이 있습니다. 그러나 환자 중 하나를 선택하면 선택 항목이 사용자 정의 컨트롤의 인스턴스를 포함하는 모든보기로 전파됩니다. 각 뷰를 각 뷰에 대한 사용자 정의 컨트롤의 새 인스턴스를 인스턴스화하는 방법은 무엇입니까? C#을 사용하고 있습니다.MVVMLight UserControl 모델보기 - 각보기에 대해 사용자 컨트롤의 새 인스턴스를 만듭니다.
답변
당신이 말한 것을 추측하면, 당신의 정적 인스턴스 인 PatientViewModel이 로케이터에서 리턴한다고 가정 할 수 있습니다. 이 문제를 해결하려면 속성이 호출 될 때 뷰 모델의 새 인스턴스가 생성되어야합니다.
편집 : 로케이터 다른 인스턴스 방법
public class ViewModelLocator
{
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
//if (ViewModelBase.IsInDesignModeStatic)
//{
// // Create design time view services and models
// SimpleIoc.Default.Register<IDataService, DesignDataService>();
//}
//else
//{
// // Create run time view services and models
// SimpleIoc.Default.Register<IDataService, DataService>();
//}
SimpleIoc.Default.Register<MainViewModel>();
}
public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}
public MainViewModel StaticMain
{
get
{
return _staticMain ?? (_staticMain = new MainViewModel());
}
}
private static MainViewModel _staticMain;
public MainViewModel NewMain
{
get
{
return new MainViewModel();
}
}
public MainViewModel NewIocMain
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>(Guid.NewGuid().ToString());
}
}
public static void Cleanup()
{
// TODO Clear the ViewModels
}
}
Main
속성은 인스턴스를 생성 Lauent의SimpleIoc
컨테이너를 사용합니다. 이 컨테이너의 속성 중 하나는 모든 유형을 싱글 톤으로 처리한다는 것입니다. 따라서이 VM 생성 방법을 사용하면 뷰 전체에서 VM을 공유하게됩니다.속성은 거의 동일하지만 Laurent의 컨테이너를 사용하는 대신보기간에 공유되는 VM의 정적 인스턴스를 보유합니다.
속성
NewMain
은 모든 호출마다 새 VM을 만들기 때문에보기간에 VM이 공유되지 않습니다.또한
NewIocMain
속성은 모든 호출시 새 VM을 만들고 따라서 뷰간에 VM이 공유되지 않습니다. 그러나SimpleIoc
컨테이너는 작성된 인스턴스에 대한 참조를 보유합니다. 이 인스턴스는 자동으로 해제되지 않으므로 더 이상 필요하지 않으면 생성에서 사용한 키 (Guid)를 사용하여 컨테이너에서 인스턴스를 제거하려면SimpleIoc.Default.Unregister(key)
으로 호출해야합니다. 대신 사용
SimpleIoc
당신은 분명 다른 IOC 컨테이너 사용하도록 선택할 수 있습니다 - 예를 들어 유니티로 - 당신에게 더 큰 인스턴스를 생성하는 방법을 제어하는 방법과 그들이 살고 있습니다. 이것을 제외하고, 나는 yor 케이스가 주어진 NewMain
접근을 선택할 것입니다.
어떻게 새 것을 반환합니까? 코드 란 무엇입니까? –
@edianga 편집을 참조하십시오. – AxelEckenberger
IOC Container를 사용하면 어떤 이점이 있습니까?이 경우에는 S/W 개발에서 Unity가 필요합니까? –
- 1. MX DataGrid에서 itemrenderer의 새 인스턴스를 만듭니다.
- 2. Android broadcastreceiver가 새 인스턴스를 만듭니다.
- 3. CRM CrmConnection의 새 인스턴스를 만듭니다.
- 4. WPF에서 사용자 컨트롤의 여러 인스턴스를 끌어서 놓기
- 5. WPF xaml에 정의 된 컨트롤의 인스턴스를 만듭니다.
- 6. 사용자 정의 컨트롤의 인스턴스를 동적으로 생성하지 않으시겠습니까?
- 7. 동적으로 IList 유형의 새 인스턴스를 만듭니다.
- 8. mvvm-light로 사용자 컨트롤의 인스턴스를 구별하십시오.
- 9. Android : 각보기에 대해 서로 다른 Java 파일
- 10. UserControl 내부 컨트롤의 앵커 속성 문제
- 11. Tomcat이 모든 요청에 대해 새 세션을 만듭니다.
- 12. MVVM을 위반하지 않고 뷰에서 컨트롤의 새 인스턴스를 만드는 방법
- 13. WPF UserControl 컨트롤의 적절한 처리
- 14. 장고 : 각보기에
- 15. 새 MVVMLight V4에서 리소스를 늘리는 방법
- 16. UserControl Click 이벤트를 호출하는 새 usercontrol
- 17. aspx 페이지 뒤에 코드가 아닌 cs 클래스에서 사용자 정의 컨트롤의 인스턴스를 만듭니다.
- 18. 컨트롤의 사용자 정의 패널에서 사용할 수있는 usercontrol 속성을 설정하십시오. Silverlight
- 19. 모델보기 컨트롤러와 모델보기 발표자
- 20. 사용자 컨트롤의 새 하위 매개 변수 전달
- 21. jQuery는 이미 작동중인 스크립트에 대해 여러 인스턴스를 만듭니다.
- 22. 사용자 컨트롤의 스타일 설정
- 23. 사용자 정의 컨트롤의 사용자 이벤트
- 24. 셀러리가 여러 개의 작업 인스턴스를 만듭니다.
- 25. 모델보기 컨트롤러 내의 모델보기 컨트롤러
- 26. MVC - 다른 모델보기 내부의 모델보기
- 27. MVVMLight Business Application?
- 28. SQL 쿼리에서 클래스의 인스턴스를 만듭니다
- 29. 클래스 인스턴스를 동적으로 가져오고 만듭니다.
- 30. UserControl 인스턴스를 만들 수 없습니다. [XapCannotFindFileInPackage]
현재 사용자 컨트롤을 다루는 방법을 보여주기 위해 code/XAML을 게시하십시오. – ken2k
우리는 ken2k이 명시된대로 코드/XAML을 볼 필요가 있다고 생각하지만, siutuation에 대한 귀하의 견해가 둥글고 둥글게 보인다는 말처럼 말한 것입니다. "각보기가 각보기에 대해 사용자 정의 컨트롤의 새 인스턴스를 인스턴스화하게하려면 어떻게해야합니까?", 각 사용자 정의 컨트롤에 대해 새 인스턴스를 원하지 않습니까? 마찬가지로 모든 뷰에 대해 공유 모델이 필요합니다. 즉,보고있는 동작이 의미가 있거나 각 컨트롤에 대한 사용자 정의 컨트롤에 모델 바인딩 인스턴스가 필요하다는 의미입니다. –
아래 제공된 솔루션을 참조하십시오. –