MainWindow.xaml에서 버튼을 클릭하면 Frame 내 표시될 Content를 변경하는
ViewModel.cs를 코드를 작성했습니다.
- CommandParameter로 전달 받은 페이지와 동일한 이름의 페이지를 CurrentPage에 할당하고, 변경됨을 알림
//ViewModel.cs
public ICommand PageChange
{
get
{
_PageChange ??= new Command.RelayCommand(PageChangAction, CurrentPageChaeckNot);
return _PageChange;
}
}
private void PageChangAction(object obj)
{
foreach (var page in _page)
{
if (obj.Equals(page.GetType().Name))
{
_CurrentPage = page;
OnPropertyChanged(nameof(CurrentPage));
break;
}
}
}
private bool CurrentPageChaeck(object obj)
{
if (obj == null) return false;
string objStr = obj.ToString() ?? "";
if (objStr.ToString().ToLower() == _CurrentPage.GetType().Name.ToLower())
{
return true;
}
return false;
}
private bool CurrentPageChaeckNot(object obj)
{
return !CurrentPageChaeck(obj);
}
//MainWindow.xaml
<Window>
<Window.DataContext>
<local:ApplicationViewModel/>
</Window.DataContext>
<DockPanel>
<Grid DockPanel.Dock="Left" >
<Button Content="go page2" Command="{Binding PageChange}" CommandParameter="page2" />
</Grid>
<Grid DockPanel.Dock="Right">
<Frame x:Name="pageView" NavigationUIVisibility="Hidden" Content="{Binding CurrentPage}"/>
</Grid>
</DockPanel>
</Window>
Frame의 Content page 내에서 Frame를 Content 를 변경하고 싶은데,
커멘드가 동작하지 않네요 …
혹시 방법을 아시는 분이 계신가요?
//Frame의 Content에 표시되는 page.xaml
<Page xmlns:root="clr-namespace:sample" d:DataContext="{d:DesignInstance Type=sample:ViewModel}">
<Grid>
<StackPanel Orientation="Vertical">
<Button Content="go page1" Command="{Binding PageChange}" CommandParameter="page1" />
</StackPanel>
</Grid>
</Page>