사용하여 동일한 기능을 수행 할 어쨌든 거기, 그러나 나는 다른 접근법을 가지고있다. 나는 앱에서 암묵적인 관계를 만들고 싶다.xaml 파일 :
<Application.Resources>
<DataTemplate DataType="{x:Type ViewModels:KioskViewModel}">
<Views:KioskView />
</DataTemplate>
</Application.Resources>
이렇게하면 아무 데나 DataContext를 설정할 필요가 없습니다.
UPDATE >>>
Natraj의 요청을 @Vignesh에 대한 응답으로
, 여기 풀러 설명입니다
당신이
Resources
요소에
DataTemplate
을 설정 한 후에
,이 예에서 KioskView
를 표시 할 수는 KioskViewModel
의 인스턴스를 XAML의 모든 위치에 추가합니다. 이것은 MainWindow
을 채울 수도 있고 화면의 특정 섹션 안에있을 수도 있습니다. ListBox
에 KioskViewModel
의 여러 인스턴스를 호스팅 할 수도 있으며 복수 KioskView
인스턴스를 생성합니다.
요구 사항에 따라 두 가지 방법으로 KioskViewModel
의 인스턴스를 XAML에 추가 할 수 있습니다. 한 가지 방법은 KioskViewModel.cs
파일이 포함 된 프로젝트의 XML 네임 스페이스를 선언하고보기를 표시 할 페이지에 ContentControl
의 인스턴스를 추가하기 만하면됩니다.
<UserControl x:Class="Kiosk.Views.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ViewModels="clr-namespace:Kiosk.ViewModels">
<UserControl.Resources>
<ViewModels:KioskViewModel x:Key="KioskViewModel" />
<DataTemplate DataType="{x:Type ViewModels:KioskViewModel}">
<Views:KioskView />
</DataTemplate>
</UserControl.Resources>
<ContentControl Content="{StaticResource KioskViewModel}" />
</UserControl>
내가 WPF와 MVVM 디자인 패턴을 사용하는 것을 선호, 그래서 나는 것 : 당신이 있다면 예를 들어, UserControl
가 MainView
라고하고 KioskViewModel.cs
파일이 Kiosk.ViewModels
네임 스페이스에 있었다,이 같은 기본 XAML을 사용할 수 있습니다 필수 INotifyPropertyChanged
인터페이스를 구현하는 것과 같은 유용한 기능을 제공하는 기본보기 모델 클래스. 그런 다음 유형의 기본 (최상위)보기 모델에 ViewModel
이라는 속성이 있습니다. 이를 통해 ViewModel
속성을 BaseViewModel
에서 파생 된 모든 뷰 모델로 변경하고 뷰 모델에서 연결된 뷰를 변경할 수있는 좋은 방법을 제공합니다.
예를 들어, MainView
에 바인딩 된 MainViewModel.cs
클래스의 필드와 관련된 특성이있다 :
private BaseViewModel viewModel = new KioskViewModel();
public BaseViewModel ViewModel
{
get { return viewModel; }
set { viewModel = value; NotifyPropertyChanged("ViewModel"); }
}
당신이 볼 수 있듯이, 그것은이 KioskViewModel
인스턴스로 시작합니다, 그러나 어떤 변경할 수 있습니다 사용자 상호 작용에 대한 응답으로 언제든지 다른보기. 이 설정의 경우, XAML은 매우 유사하지만, 대신 Resources
요소의 뷰 모델의 인스턴스를 선언, 우리는 MainViewModel
에서 속성에 바인딩이 예를 들어, 우리가 필요로하는 것을
<UserControl x:Class="Kiosk.Views.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ViewModels="clr-namespace:Kiosk.ViewModels">
<ContentControl Content="{Binding ViewModel}" />
</UserControl>
주
<Application.Resources>
<DataTemplate DataType="{x:Type ViewModels:MainViewModel}">
<Views:MainView />
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModels:KioskViewModel}">
<Views:KioskView />
</DataTemplate>
</Application.Resources>
콘텐츠 태그에 속성 (종속성 속성 또는 일반 속성)이 필요하지 않습니까? 아니면 ... "현재"가 동일한 내용을 어떻게 충족합니까? – Relativity
안녕하세요 토마스, 위 쿼리에 대한 아이디어를 제공해 주시겠습니까? – Relativity
위의 코드에서 'Current'는 데이터 컨텍스트의 유형 인 MyViewModel의 속성이됩니다 –