xaml 초보임...
Visual Studio 2017, Prism Nuget설치해서 하고있음
Mainwindow이 있고 그 안에 Usercontrol1, usercontrol2가 있고
Usercontrol1과 2안에는 각각 버튼이 하나씩 존재하고있음
구현하고싶은건 Mainwindow에 있는 Usercontrol1의 버튼이 눌렸을 때 Visibility 속성을 Hidden으로 변경하고 Usercontrol2는 Visible로 바뀌고 그 반대로
UserControl2의 버튼이 눌렸을 때 Hidden이 되고 Usercontrol1이 Visible로 변하는거임
구상하기에는 Usercontrol1에서 Visible의 속성 변경이 감지됨 -> Mainwindow에서 Usercontrol1의 속성 변화를 감지하여 Visible인지 Hidden인지 확인함 -> Hidden이면 Usercontrol2의 Visible 속성을 Visible로 변경해줌.
간단할 줄 알았는데 어째선지 Visible속성이 변경되었다는걸 어떻게 받아오는지 전혀 감이 안와 헬프;
[MainWindow.xaml]
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/"
xmlns:local="clr-namespace:Testing.Views"
prism:ViewModelLocator.AutoWireViewModel="True"
Title="{Binding Title}" Height="350" Width="525">
[MainWindowViewModel.cs]
using System;
using System.Windows;
using Prism.Commands;
using Prism.Mvvm;
using Testing.Views;
namespace Testing.ViewModels
{
public class MainWindowViewModel : BindableBase
{
private string _title = "Prism Application";
public string Title
{
get => _title;
set => SetProperty(ref _title, value);
}
private Visibility ctrlVisibility;
public Visibility CtrlVisibility
{
get => ctrlVisibility;
set => SetProperty(ref ctrlVisibility, value);
}
}
}
[PrismUserControl1.xaml]
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True">
<Button Command="{Binding CmdClick}">1</Button>
[PrismUserControl1ViewModel.cs]
using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using Testing.Views;
namespace Testing.ViewModels
{
public class PrismUserControl1ViewModel : BindableBase
{
PrismUserControl1 thisCtrl;
private DelegateCommand cmdLoad;
public DelegateCommand CmdLoad =>
cmdLoad ?? (cmdLoad = new DelegateCommand((e) =>
{
thisCtrl = e.Source as PrismUserControl1;
}));
private DelegateCommand cmdClick;
public DelegateCommand CmdClick =>
cmdClick ?? (cmdClick = new DelegateCommand(ExecuteCmdClick));
void ExecuteCmdClick()
{
Console.WriteLine("유저컨트롤1 내부 클릭");
thisCtrl.Visibility = Visibility.Hidden;
}
}
}
Usercontrol2는 1과 똑같은 모양이므로 패스
코드가 제대로 안올라가네 -_-