질문은 거의 모든 것을 말해줍니다.
나는 창이 있고 ViewModel에 전체 네임 스페이스를 사용하여 DataContext를 설정하려고 시도했지만 뭔가 잘못된 것 같습니다.
<Window x:Class="BuildAssistantUI.BuildAssistantWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="BuildAssistantUI.ViewModels.MainViewModel">
답변
다른 사람들이 제공 한 솔루션 (좋고 올바른) 외에도 XAML에서 ViewModel을 지정하면서도 특정 ViewModel을 View에서 분리하는 방법이 있습니다. 분리 된 테스트 케이스를 작성하고자 할 때 유용합니다.
App.xaml에서 :
<Application
x:Class="BuildAssistantUI.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:BuildAssistantUI.ViewModels"
StartupUri="MainWindow.xaml"
>
<Application.Resources>
<local:MainViewModel x:Key="MainViewModel" />
</Application.Resources>
</Application>
MainWindow.xaml에서 :
<Window x:Class="BuildAssistantUI.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="{StaticResource MainViewModel}"
/>
답변
대신 이것을 시도하십시오.
<Window x:Class="BuildAssistantUI.BuildAssistantWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:VM="clr-namespace:BuildAssistantUI.ViewModels">
<Window.DataContext>
<VM:MainViewModel />
</Window.DataContext>
</Window>
답변
MainViewModel을 인스턴스화하고 데이터 컨텍스트로 설정해야합니다. 귀하의 진술에서 그것은 단지 그것을 문자열 값으로 간주합니다.
<Window x:Class="BuildAssistantUI.BuildAssistantWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:BuildAssistantUI.ViewModels">
<Window.DataContext>
<local:MainViewModel/>
</Window.DataContext>
답변
답변
viewmodel을 지정하는 다음과 같은 방법도 있습니다.
using Wpf = System.Windows;
public partial class App : Wpf.Application //your skeleton app already has this.
{
protected override void OnStartup( Wpf.StartupEventArgs e ) //you need to add this.
{
base.OnStartup( e );
MainWindow = new MainView();
MainWindow.DataContext = new MainViewModel( e.Args );
MainWindow.Show();
}
}
<랜트>
이전에 제안 된 모든 솔루션에는 MainViewModel
매개 변수없는 생성자 가 있어야합니다.
Microsoft는 매개 변수없는 생성자를 사용하여 시스템을 구축 할 수 있다는 인상을 받았습니다. 당신도 그 인상을 받고 있다면 다른 해결책을 사용하십시오.
생성자에 매개 변수가 있어야하므로 객체의 인스턴스화는 매직 프레임 워크의 손에 맡길 수 없다는 것을 알고있는 사람들에게 뷰 모델을 지정하는 올바른 방법은 위에서 보여준 방법입니다.
</ Rant>