예를 들어 두 개의 탭과 파일 메뉴가있는 단일 WPF 창이 있습니다. MainView.xamlMVVM ViewModel이 View와 상호 작용하는 것은 사실입니까?
MainViewModel.cs
"숨기기 탭 (1)"메뉴 : 파일 메뉴는 두 개의 항목을 "숨기기 탭 1"은 "표 1"
프로그램은 다음 클래스가있다 명령은 MainViewModel.cs에 포함 된 HideTab1Command에 바인딩됩니다.
HideTab1은 ViewModel에서 tab1을 숨기려면 View와 직접 상호 작용합니다.
기술적으로 MVVM 동작 (MVP와 유사)이 아닙니까? 예를 들어 진정한 MVVM의 경우이 동작을 수행하는 기능은 전적으로 XAML 코드 또는 MainView.xaml.cs의 "코드 숨김"에 포함되어야합니다.
항상 MVVM 응용 프로그램과 예제를 볼 수 있지만 SRP (Single Responsibility Principle)를 위반하는 것으로 보입니다. 나는 코드가 내 지금 것을 알 수 있습니다 동안
은 내가 HideTab1 명령을 간단히 MainView.xaml.cs
내에서 코드를 호출하는 인터페이스 IMainView를 통해보기를 통지와 동일한 작업을 수행 일부 다른 응용 프로그램을 참조 첫 번째 예제와 다른 점은 무엇입니까? SRP는 ViewModel이 무엇을 해야할지를 말하면서 여전히 무효입니다.
이 예제 중 하나가 true MVVM 패턴이고 그렇지 않은 경우 올바른 MVVM 패턴이 "탭 1"을 숨기거나 표시하는 것입니다.
MVVM/MVP가 무엇인지에 대한 오해를 용서해주십시오. 이러한 디자인 패턴을 올바르게 배우기 위해 최선을 다하고 있습니다.
예 : ShowTab1은보기를 직접 조작하는 명령입니다. MVVM 프로젝트에서 항상 이것을 보았습니다 (많은 DevExpress 예제). 그러나 ViewModel이 직접 뷰를 조작 할 때 MVVM의 이점을 가지고 있지는 않습니다.
MainWindow.xaml
<Window x:Class="WpfApplication.MainWindow"
...
<Button Content="Show hidden panels" Command="{Binding ShowTab1}"/>
...
<TabGroup>...
...
</Window>
MainWindowViewMode.cs
public class MainViewModel
{
IMainView mainView;
public MainViewModel()
{
ShowTab1 = new ShowTab1Command(this);
mainView = ... (set this to a reference to the view)
}
public ICommand ShowTab1 { get; set; }
}
public class ShowTab1Command: ICommand
{
private readonly MainViewModel _model;
public ShowTab1Command(MainViewModel model)
{
_model = model;
}
void ICommand.Execute(object parameter)
{
_model.mainView.TabGroup1MakeVisible();
}
bool ICommand.CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
public interface IMainView{
public void TabGroup1MakeVisible();
는 사실 MVVM 뷰 예상하는 DataContext를 데이터로 변환하기위한 순수 뷰 모델을 가질 것이다. 모든보기 조작은 CodeBehind 또는 XAML의보기에서 수행됩니다. 아니면이 잘못입니까?
실제 코드없이 질문을 따르는 것은 매우 어렵습니다. 틀림없이 짧은 샘플을 보여줄 수 있을까요? – ASh
HideTab1이 ViewModel 속성 (?)이라는 것을 올바르게 이해하면 이름 자체가 MVVMish가 아님 – Tyress
HideTab1은 명령입니다. 예를 들어, 파일 메뉴에서 탭 1을 숨길 때 원하는 동작은 탭을 숨기는 것입니다. 이것은 간단한 예일뿐 실제 실제 프로그램이 아닙니다. 나는 당신이 내가 무엇을 더 자세히 묻고 있는지 볼 수 있도록 나중에 뭔가를 쓸 것이다. – rolls